1、预编译是什么?
每个函数在运行之前都会将函数进行预编译,目的是用来进行初始化相关操作。简单来说,就是讲var声明的变量提前,function声明的函数提前,都放入一个作用域中,我们称之为Activation Object(简称AO)。既然函数体内的变量及函数可以提前进行预编译,那么,函数体外面的呢?答案是肯定的。在函数体外面将提前的变量及函数同样也放入一个作用域中,我们将它称之为Global Object(简称GO)。
2、举例
function cll (x){
console.log(x);
var x = 1;
console.log(x);
var x = function(){
};
x = 10;
console.log(x);
}
cll(5);
如上代码所示,当函数要运行时先进行预编译,预编译需要注意的时将变量声明提前,赋值留在原地,被提前的变量默认为undefined,故以上函数进行预编译后是这样的。
function cll (x){
var x
console.log(x);
x