JavaScript 预编译

JavaScript 预编译,第1张

预编译

预编译是上下文环境创建之后,js代码执行之前的对js代码的预处理

预编译包含全局预编译和函数预编译

全局预编译

全局上下文创建后,会生成VO变量对象,VO首先会寻找变量声明,将var声明的变量作为VO对象的属性名,值为undefined。然后寻找函数声明,将函数名作为VO对象的属性名,函数本身作为对应的属性值。如果函数名和变量名冲突,函数值会覆盖掉变量值。
查找顺序:变量声明 -> 函数声明

console.log(a)
var a = 100
function a (){}
console.log(a)

/*VO:{
    a:undefined -> function //先是变量声明值为undefined,然后是函数声明,值是函数本身
}*/
 //输出结果:
 //function
 //100
函数预编译

函数上下文创建后,会生成AO变量对象

预编译过程:

寻找变量声明,变量名作为AO对象的属性名,属性值为undefined寻找形参,形参名作为AO对象的属性名,属性值为undefined实参给形参赋值,对应形参在AO中的属性值变为实参的值寻找函数声明,函数名作为AO对象的属性名,属性值为函数本身如果函数名与变量名冲突,则函数值将变量值覆盖
function fn(a,b){
    console.log(a)
    var a =100
    console.log(a)
    function a(){}
    console.log(b)
}
   fn(200, 300);
/*   VO:{
    a:undefined-> undefined -> 200 ->function
    b:undefined ->300
    }
    输出结果:
    ƒ a() {}
    100
    300
 */

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1298960.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存