JavaScript预编译
顺序:
①语法分析
②预编译
③解释一行执行一行
预编译:
现象:函数声明整体提升,变量 声明提升,赋值不提升
imply global(暗示全局变量)如果变量未经声明就赋值,则此变量为全局对象window所有。一切声明的全局变量,全是window的属性。window是全局的域
预编译发生在函数执行的前一刻
预编译四步:
①创建AO对象(activation object活跃对象 执行期上下文(简单说就是作用域))
AO{}
②找形参和变量声明,将变量和形参名作为AO的属性名,值为undefined
③将实参值和形参统一
④在函数体里找到函数声明,值赋给函数体。
预编译结束执行函数体,声明部分不在执行,赋值部分要执行。
全局的同理 生成的是GO对象,就是window对象
先生成GO在生成AO:先生成go,在执行函数的前一刻在生成AO