javascript预编译+例题分析

js运行三部曲
语法分析
预编译
解释执行
预编译前奏
imply global 暗示全局变量, 即任何变量, 如果为经声明就赋值, 此变量就为全局对象所有.
一切声明的全局变量, 全是window的属性.
例: var a = 123; –> window.a = 123;
预编译四部曲:
创建AO对象
找形参和变量声明, 将变量和形参名作为AO属性名, 值为undefined
将实参值和形参统

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也是全局的

越来越多的平台(微信公众平台,新浪微博,简书,百度打赏等)支持打赏功能,付费阅读时代越来越近,特此增加了打赏功能,支持微信打赏和支付宝打赏。坚持原创技术分享,您的支持将鼓励我继续创作!