预解析
预解析 JS代码在执行之前,会对代码进行预解析,寻找作用域中的var 和function ,然后对其进行事先声明,在从上到下执行代码。这就是一个预解析的过程。 预解析机制 js代码只执行前,会把函数或者变量声明提升所在作用域的最顶端 注意点:只是声明提前(变量声明和函数声明),变量的赋值和函数的调用留在原地 依次执行 全局作用域 GO对象:全局对象 a 生成一个GO对象,封装的就是作用域 GO={} b 分析变量声明(var) 就是声明的变量名作为Go对象的属性名 值为undefinde c 分析函数声明 函数名作为Go对象的属性名,属性值为函数体,如果有遇到同名函数,直接覆盖 console . log ( a ) ; var a = 12 ; function a ( ) { var a ; var a = function ( ) { } } /* 1生成一个GO对象:GO={} 2分析变量声明 GO={a:undefined} 3分析函数声明 GO={a:function a() { var a; var a = function() { } }} */ AO对象(活动对象) AO的步骤 在函数执行前的一瞬间, 1生成一个AO对象 2. 分析参数 ,以形参作为该对象的属性名,实参作为属性值 3. 分析变量声明(var声明的变量) 变量名为属性名 ,值为undefined