js的解析和执行过程
2016-09-22 11:00
246 查看
今天开始学习,js面向对象方面,以前了解的不够深入,有很多疑问,这次争取解决大部分疑问,对js的掌握更上一层楼。
首先,js代码分为预处理和执行两个阶段,可以分为全局和函数两个不同的部分。
全局在预处理阶段会创建一个全局的词法环境,也就是window,然后扫描var声明或函数声明。函数名与函数名或变量名冲突处理方法:
函数在预处理阶段,会产生一个函数词法环境,每次调用都会产生一个词法环境,如果函数有参数,词法环境就首先包含参数,依次是声明式函数及var变量,冲突情况和全局一样。执行阶段给预处理阶段的成员赋值,如果没有用var声明的变量,会成为外部词法环境的成员。
这个只是为后面作用域和闭包做铺垫,了解预处理,可以清楚的知道js代码解析执行过程。加深理解。
首先,js代码分为预处理和执行两个阶段,可以分为全局和函数两个不同的部分。
全局在预处理阶段会创建一个全局的词法环境,也就是window,然后扫描var声明或函数声明。函数名与函数名或变量名冲突处理方法:
处理函数声明冲突时会覆盖,处理变量声明时冲突会忽略
<script type="text/javascript"> //预处理阶段扫描所有var定义 并添加到词法环境,变量为undefined,函数为函数体 /* 预处理阶段类似于 Lexical Environment{ a:undefined, b:function b(){ console.log(11); }, } * */ alert(a);//undefined alert(b);//undefined var a = 1;//赋值 var b = 2;//执行时赋值,覆盖b:2 function b(){ console.log(11); } alert(a);//1赋值完成后弹出相应的值 alert(b);//2 </script>
函数在预处理阶段,会产生一个函数词法环境,每次调用都会产生一个词法环境,如果函数有参数,词法环境就首先包含参数,依次是声明式函数及var变量,冲突情况和全局一样。执行阶段给预处理阶段的成员赋值,如果没有用var声明的变量,会成为外部词法环境的成员。
/* f{ a:1, b:2, c:undefined, d:function d(){ console.log(c); console.log(e); var e = 1; console.log(1); } } * */ function f(a,b) { alert(a);//1 alert(b);//2 alert(c);//undefined alert(d); var c = 1; function d(){ console.log(e); var e = 1; console.log(1); } d(); } f(1,2);
这个只是为后面作用域和闭包做铺垫,了解预处理,可以清楚的知道js代码解析执行过程。加深理解。
相关文章推荐
- js的解析与执行过程
- JS 的解析与执行过程
- js预编译解析执行过程分析
- JS的解析与执行过程
- JS的预解析与执行过程详解
- JS的解析与执行过程
- 示例线程sleep执行过程解析
- js加载与执行机制解析
- TC执行过程解析
- SQL SERVER 给一个大表添加自增主建 执行过程解析
- Android系统Recovery工作原理之使用update.zip升级过程分析(八)---解析并执行升级脚本updater-script
- Android系统Recovery工作原理之使用update.zip升级过程分析(八)---解析并执行升级脚本updater-script
- Android系统Recovery工作原理之使用update.zip升级过程分析(八)---解析并执行升级脚本updater-script
- js 函数的执行环境和作用域链的深入解析
- C#里执行Js,C#解析JS方法--附58同城自动登录功能
- JavaScript 全面解析各种浏览器网页中的JS 执行顺序
- hive源码解析(1)之hive执行过程
- 去年的webkit的js解析与执行
- JavaScript 全面解析各种浏览器网页中的JS 执行顺序
- Oracle SQL 的硬解析和软解析 以及 SQL的整个在Oracle中的执行过程。