javascript预编译+例题分析

js运行三部曲

  • 语法分析
  • 预编译
  • 解释执行

预编译前奏

  1. imply global 暗示全局变量, 即任何变量, 如果为经声明就赋值, 此变量就为全局对象所有.
  2. 一切声明的全局变量, 全是window的属性.
    例: var a = 123; --> window.a = 123;

预编译

四部曲:

  • 创建AO对象

  • 找形参和变量声明, 将变量和形参名作为AO属性名, 值为undefined

  • 将实参值和形参统一

  • 在函数体里面找函数声明, 值赋予函数体.
    例:

    例子

    以当前函数为例子
    创建AO对象为{
    a: undefined
    b: undefined
    }
    第三部将实参值和形参相统一
    AO = {
    a : 1,
    b : undefined
    }
    第四部, 在函数体里找函数声明, 值赋予函数体
    Ao = {
    a: function a( ){ },
    b: undefined,
    d: function d( ) { }
    }
    因此该例子打印出来的结果应该为
    例子

  • 总结
    变量声明提升,
    函数声明整体提升


相信你已经掌握了方法, 因此我们再来一个例子来试试

例子

function d ( ){ }创建AO对象, function d ( ){ }形参变量声明
AO = {
a : undefined,
b : undefined,
c : undefined
}
第三部实参与形参相统一
AO = {
a : 1,
b : undefined,
c : undefined
}
第四部,在函数体里找函数声明, 值赋予函数体
AO = {
a : 1,
b : function b ( ){ },
c : undefined,
d ; function d ( ){ }
}
最后开始执行, 先打印a为1, 借下来将c = 0, a = 3, b = 2, 打印b为2, 再打印b为2.


再来看一个例子

例子

注意: 这里的a也是全局的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容