重温JavaScript预编译的四个步骤
JS是解释型语言,运行过程分三步:
一、语法分析(检查代码是否存在语法错误);
二、预编译(代码执行之前,在内存中开辟空间,存放变量与函数);
三、解释执行(执行JS代码);
理解预编译的过程,对于理解作用域链、闭包、this指向、原型链至关重要,它们是相辅相成的。
预编译分为四步:
1、创建AO对象
就是隐式的创建一个AO(Activation Object)空对象。
2、查找形参和变量声明,将形参名和变量名作为AO对象的属性,值为undefined
注意此处是变量声明(必须带var),只是查找形参名和变量声明名不赋值。
3、将形参与实参统计
即修改AO对象中属性名为形参的值为传入的实参,如果没有形参此步略过。
4、查找函数声明,函数名作为AO对象的属性,函数体作为的值
此处是函数声明,而非匿名函数和函数表达式。
总结:预编译过程就是查找变量声明、形参和函数声明的过程,并不初始化赋值,在解释执行阶段才会进行初始化 。
重温JavaScript预编译的四个步骤的更多相关文章
- JavaScript 预编译与作用域
JavaScript 预编译与作用域 JavaScript 预编译的过程和作用域的分析步骤是 JS 学习中重要的一环,能够帮助我们知道代码的执行顺序,更好理解闭包的概念 预编译 JavaScript ...
- 关于JavaScript预编译和执行顺序以及函数引用类型的思考
昨晚在对项目中的一部分做模块化处理的时候,遇到了一个问题,一个重新定义的function对一个通用类中的function进行赋值覆盖的时候,失败了.问题抽象出来是这样的: <script > ...
- javaScript 预编译过程浅尝
javaScript 预编译过程 1.创建AO对象(Activation Object) AO{ a: } 2.找形参和变量声明,将变量和形参作为AO属性名,值为undefined AO{ a:und ...
- JavaScript预编译详解
一.js运行三部曲: 1.语法分析(通篇扫描看有没有语法错误) 2.预编译 3.解释执行 二.预编译前奏 1.imply global 暗示全局变量:任何变量如果未经声明就赋值,此变量为全局对象所有 ...
- javascript预编译的过程
预编译的两种情况 全局: 1.全局 直接是script标签中的代码,不包括函数执行执行前:1.首先生成一个GO(global object)对象,看不到,但是可以模拟出来用来分析2.分析变量声明,变量 ...
- Javascript - 预编译与函数词法作用域
预编译与函数词法作用域(Precompiled & Scoped) 预编译 Javascript脚本的宿主在执行代码之前对脚本做了预编译处理,比如浏览器对Js进行了预编译,编译器会扫描所有的声 ...
- 浅谈JavaScript预编译原理
这两天又把js的基础重新复习了一下,很多不懂得还是得回归基础,大家都知道js是解释性语言,就是编译一行执行一行,但是在执行的之前,系统会做一些工作: 1,语法分析: 2,预编译: 3,解释执行. 语法 ...
- javascript预编译和执行过程总结
javascript相对于其它语言来说是一种弱类型的语言,在其它如java语言中,程序的执行需要有编译的阶段,而在javascript中也有类似的“预编译阶段”(javascript的预编译是以代码块 ...
- javascript预编译练习(变态篇)
例1. <!DOCTYPE html> <html> <head> <title></title> </head> <bo ...
随机推荐
- 【LibreOJ】#6354. 「CodePlus 2018 4 月赛」最短路 异或优化建图+Dijkstra
[题目]#6354. 「CodePlus 2018 4 月赛」最短路 [题意]给定n个点,m条带权有向边,任意两个点i和j还可以花费(i xor j)*C到达(C是给定的常数),求A到B的最短距离.\ ...
- 小程序登录、微信网页授权(Java版)
首先呢,“登录”.“授权”.“授权登录”,是一样的意思,不用纠结. 写小程序授权登录的代码前,需要了解清楚openid与unionid的区别,这里再简单介绍一下: 腾讯有个 “微信·开放平台”,只有企 ...
- shell邮件发送功能实现
本文中以163邮箱为例,测试shell邮件发送功能.常见的工具有:mailx.sendmail.mutt等. 1.设置邮件客户端 (1)启用pop3.smtp服务,以支持第三方客户端支持 (2)设置授 ...
- python爬虫-图片批量下载
# 爬起摄图网的图片批量下载# coding:utf-8 import requests from bs4 import BeautifulSoup from scipy.misc import im ...
- 图文详解 解决 MVC4 Code First 数据迁移
在使用Code first生成数据库后 当数据库发生更改时 运行程序就会出现数据已更改的问题 这时可以删除数据库重新生成解决 但是之前的数据就无法保留 为了保留之前的数据库数据 我们需要使用到C ...
- C# UDP广播消息
首先是发送端: /// <summary> /// 发送UDP消息 /// </summary> /// <param name="msg">消 ...
- nginx 日志切割(也适用于docker)
=============================================== 2019/4/6_第2次修改 ccb_warlock 201 ...
- 环境变量GOBIN导致GoClipse运行出现异常
Windows 10家庭中文版,go version go1.11 windows/amd64, Eclipse IDE for C/C++ Developers Photon Release (4. ...
- 页面嵌入隐藏iframe实现导出功能
<div style="display: none"> <form action="" name="exportExcel" ...
- liunx jdk安装
打开https://www.oracle.com/technetwork/java/javase/downloads/index.html 选择Development版本(server为服务器版本), ...