变量对象(VO)执行顺序
1.函数参数(没有赋值时,为undefined)
2.函数声明(发生命名冲突,会覆盖之前的)
3.变量声明(初始值为undefined时,发生命名冲突,会被忽略)
function fun(x, y, z) { var func = function() { console.log('function'); }; var func; //被忽略 console.log(func); } fun(); //function
function fun(x, y, z) { var func = function() { console.log('function'); }; var func = 1; //覆盖 console.log(func); } fun(); //1
4.函数和变量都可以前置;
但是变量前置只是变量名前置,而变量值没有被前置是undefined;
所以,函数可以在声明之前调用,变量不能;
console.log(x); //function //函数声明被前置 var x = 10; console.log(x); //10 x = 20 function x() {}; console.log(x) //20
if (true) { var a = 1 } else { var b = true } console.log(a) //1 console.log(b) //undefined