javaScript预编译
Posted sharon2017
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaScript预编译相关的知识,希望对你有一定的参考价值。
随笔1.未声明的变量就直接赋值,那么该变量则归全局变量所有,全局对象是什么,全局对象就是window exp:
function test(){ a=7; }
test();
console.log(window.a);//7
js三部曲:
1,:语法分析
2:预编译
3:解释执行
预编译四部曲:
1.创建AO(Activation Object)对象
2.找形参和变量声明,将变量和形参作为AO属性名,值为undefined
3.将实参值和形象统一
4.在函数体里面找函数声明,值赋予函数体
exp:
function fn(a) { console.log(a); var a = 123; console.log(a); function a() { }; console.log(a); var b = function () { }; console.log(b); function d() { }; } fn(1);
那么预编译过程,创建AO对象里的值变化过程如下
根据四部曲的1和2步骤,得:
AO{
a:undefind
b:undefind
}
根据3步骤,得:
AO{ a:1 b:undefind }
根据4步骤,得:
AO{ a:function a() { } } b:undefind d:function d() { } }
所以,到这里预编译已经完成,开始执行代码,即第一个log
console.log(a);//function a(){}
第二个log
console.log(a);//123
第三个log
console.log(a);//123
第四个log
console.log(b);//function () { }
以上是关于javaScript预编译的主要内容,如果未能解决你的问题,请参考以下文章