其他分享
首页 > 其他分享> > 预编译

预编译

作者:互联网

预编译

函数预编译

  1. 检查代码是否错误,符号,词法分析

  2. 隐式操作

    (形实函运)

    1. 函数调用以后,在运行代码之前,会生成一个对象(Activation)
    2. 把所有的局部变量和形参添加为AO成员,值为undefined(隐式声明提升)
    3. 将实参赋值给形参(AO对象)
    4. 将局部函数的变量作为AO对象的成员名,函数体赋值给AO对象

    运行代码

    代码运行完后,activation对象释放

全局预编译

  1. 生成一个对象Glabal Object(GO)
  2. 把所有的全局变量,设置为GO的属性名
  3. 把所有函数名作为GO的成员名,把函数体赋值给这个GO成员
  4. 执行代码

注意:不同的环境中运行js代码不一样,GO对象成员全部浅拷贝被对象window,node.js环境没有这一步

扩展:关于访问成员,console.log(a)访问的是GO对象的成员(没有就会报错)

console.log(window.a)不报错,原型链中没有会返回undefined

标签:对象,成员,AO,编译,GO,代码
来源: https://www.cnblogs.com/shuilifang/p/16367910.html