JavaScript虽然是解释执行,但也不是按部就班逐句解释执行的,在真正解释执行之前,JavaScript解释器会预解析代码,将变量、函数声明部分提前解释,这就意味着我们可以在function声明语句之前调用function。
console.log(a);//undefined
var a=1;
console.log(a);//1
console.log(b);//ReferenceError
上面代码在执行前var a=1; 的声明部分就已经得到预解析(但是不会执行赋值语句),所以第一次的时候会是undefined而不会报错,执行过赋值语句后会得到1,上段代码去掉最后一句和下面代码是一样的效果。
var a;
console.log(a);//undefined
a=1;
console.log(a);//1