预编译

预编译

函数预编译

  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

posted @ 2022-06-12 13:54  a立方  阅读(25)  评论(0编辑  收藏  举报