预编译
作者:互联网
预编译
函数预编译
-
检查代码是否错误,符号,词法分析
-
隐式操作
(形实函运)
- 函数调用以后,在运行代码之前,会生成一个对象(Activation)
- 把所有的局部变量和形参添加为AO成员,值为undefined(隐式声明提升)
- 将实参赋值给形参(AO对象)
- 将局部函数的变量作为AO对象的成员名,函数体赋值给AO对象
运行代码
代码运行完后,activation对象释放
全局预编译
- 生成一个对象Glabal Object(GO)
- 把所有的全局变量,设置为GO的属性名
- 把所有函数名作为GO的成员名,把函数体赋值给这个GO成员
- 执行代码
注意:不同的环境中运行js代码不一样,GO对象成员全部浅拷贝被对象window,node.js环境没有这一步
扩展:关于访问成员,console.log(a)访问的是GO对象的成员(没有就会报错)
console.log(window.a)不报错,原型链中没有会返回undefined
标签:对象,成员,AO,编译,GO,代码 来源: https://www.cnblogs.com/shuilifang/p/16367910.html