javascript预编译+例题分析

js运行三部曲

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

预编译前奏

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

预编译

四部曲:

  • 创建AO对象
  • 找形参和变量声明, 将变量和形参名作为AO属性名, 值为undefined
  • 将实参值和形参统一
  • 在函数体里面找函数声明, 值赋予函数体.
    例:javascript预编译+例题分析_第1张图片
    以当前函数为例子
    创建AO对象为{
    a: undefined
    b: undefined
    }
    第三部将实参值和形参相统一
    AO = {
    a : 1,
    b : undefined
    }
    第四部, 在函数体里找函数声明, 值赋予函数体
    Ao = {
    a: function a( ){ },
    b: undefined,
    d: function d( ) { }
    }
    因此该例子打印出来的结果应该为
    javascript预编译+例题分析_第2张图片

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


相信你已经掌握了方法, 因此我们再来一个例子来试试
javascript预编译+例题分析_第3张图片
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.


再来看一个例子
javascript预编译+例题分析_第4张图片
注意: 这里的a也是全局的

你可能感兴趣的:(JavaScript,javascript入门到进阶)