JS的解析与执行——全局预处理
2017-12-13 15:59
239 查看
JS的的解析与执行主要分为两个阶段,一是预处理阶段,二是执行阶段。JS代码的执行并不是读取一行代码处理一行代码。在正式执行代码这个阶段之前有一个预处理阶段。在预处理阶段,我们人为分成全局代码和函数内部代码。因为两者有少许差别,因此我们分开讲解。今天我们主要讲全局预处理。
全局预处理就的第一步是创建Lexical Environment(词法环境)对象。第二步是扫描全局的js代码里面的两部内容(用声明的方式创建的函数和用var定义的变量)。通常是先扫描函数声明后扫描var声明的变量。第三步将扫描到的内容添加到Lexical Environment中。
什么是用声明的方式创建的函数呢?举个栗子。
在浏览器中,LexicalEnvironment === window。
既全局预处理阶段会把用声明的方式创建的函数和用var声明的变量加入到Lexical Environment中。例如:
Lexical Environment{
a:undefined
foo:对函数的一个引用
}
全局预处理就的第一步是创建Lexical Environment(词法环境)对象。第二步是扫描全局的js代码里面的两部内容(用声明的方式创建的函数和用var定义的变量)。通常是先扫描函数声明后扫描var声明的变量。第三步将扫描到的内容添加到Lexical Environment中。
什么是用声明的方式创建的函数呢?举个栗子。
<!doctype html> <html> <head> <meta charset="utf-8"> <title>全局预处理</title> </head> <body> <script> foo(); g(); function foo(){ console.log("用声明的方式创建的函数"); } var g = function(){ console.log("函数表达式"); } </script> </body> </html>
在浏览器中,LexicalEnvironment === window。
<!doctype html> <html> <head> <meta charset="utf-8"> <title>全局预处理</title> </head> <body> <script> console.log(a); var a=5; b=6; console.log(window.b); </script> </body> </html>
既全局预处理阶段会把用声明的方式创建的函数和用var声明的变量加入到Lexical Environment中。例如:
<!doctype html> <html> <head> <meta charset="utf-8"> <title>全局预处理</title> </head> <body> <script> console.log(a); var a=5; foo(); function foo(){ console.log("foo"); } </script> </body> </html>
Lexical Environment{
a:undefined
foo:对函数的一个引用
}
相关文章推荐
- JS的解析与执行——全局预处理命名冲突解决策略与执行
- Js的全局预处理、解析与执行
- JS的解析与执行——函数预处理与执行
- 理解,JS全局预处理与执行
- js加载之后,解析,已经挂到全局对象上
- 实例解析js中try、catch、finally的执行规则
- JS分段(<script/>)解释执行:先解析(定义变量+函数)后执行
- JavaScript 全面解析各种浏览器网页中的JS 执行顺序
- JavaScript:全面解析各种浏览器网页中的JS代码的执行顺序
- ECMASCRIPT——Js中的数据类型、运算符、流程控制、函数作用域链、预解析、匿名函数自执行、怪异的几个地方
- C#里执行Js,C#解析JS方法--附58同城自动登录功能
- 解析页面加载与js函数的执行 onload or ready
- jsp页面:js方法里嵌套java代码(是操作数据库的),如果这个js 方法没被调用,当jsp页面被解析的时候,不管这个js方法有没有被调用这段java代码都会被执行?
- 嵌套的for循环执行顺序。可以让内外for循环交替执行。简单解析json数组。求js中两个时间差值。
- 转:js全局变量与局部变量 预解析与作用域链详解
- js的解析与执行过程
- JavaScript 全面解析各种浏览器网页中的JS 执行顺序
- js加载与执行机制解析
- js的预解析和代码执行相关规则
- js 函数的执行环境和作用域链的深入解析