预编译 AO
js运行时会进行三件事: 1.语法分析 2.预编译 3.解释执行 语法分析会在代码执行前对代码进行通篇检查,以排除一些低级错误 预编译发生在代码执行的前一刻 解释执行就是执行代码 预编译的作用: 1、函数声明整体提前; 写出一个函数声明,不管写在哪里,系统总会将其提升到逻辑最前面。 2、变量声明提前 例如: document . write ( x ) ; //undefined var x = '你好' ; 相当于 var x ; //提前 document . write ( x ) ; //undefined x = '你好' ; 预编译前奏 1、任何变量,如果变量未经声明就赋值,此变量就为全局对象所有, 2、一切声明的全局变量,全是window的属性; 预编译四个步骤: 1、创建AO(activation object/执行期上下文)对象 2、找形参和变量声明,将变量和形参作为AO的属性名,值为undefined 3、将实参值和形参统一 4、在函数中找函数声明,值赋予函数体 根据预编译四个步骤逐步分析: function fun ( x ) { console . log ( x ) ; var x = 'beautiful' ; console . log ( x ) ; function x ( ) { } console . log ( x ) ; var y =