预编译
首先是全局预编译 三步
第1步. 创建一个GO对象 Global Object
第2步. 将var关键字声明的变量当作GO对象的属性,赋值为undefined,有重名的直接覆盖
第3步. 将function关键字声明函数 当作GO对象的属性,值为函数体,重名直接覆盖。
console.log(i);
var i = 30;
console.log(i);
function i() { }
var i = function () { }
console.log(i);
如何分析这个全局预编译
1.首先创建GO对象
2.找到变量声明,并赋值为undefined
GO{
i:undefined
}
3.找到函数声明,并赋值对应的变量
GO{
i:function i(){}
}
4.然后执行代码
{
i:function(){}
}
第一个打印的i,经过预编译现在 i 等于 function i( ){ }
第三行,i=10, 现在GO对象的i=30。
第二个打印的i,经过改变打印出 30。
第五行,i = function( ){ },现在GO对象的i=function( ){ }。
第三个打印的i,经过改变变成 function( ){ };
函数预编译
函数执行的前一刻开始
第1步.