在JavaScript存在着这样一种预处理机制,即浏览器在解析JS代码时会将var声明的变量和function声明的函数提升到当前作用域的顶部。但是解析JS代码时对var和function关键字声明的对象的处理是不一样的:前者在解析时只是将声明提前了,但是赋值却依旧在原来的位置。而后者不仅将声明提前了,而且将定义也完成。具体请看下面的例子:
1 console.log(hello); //undefined 2 sayHi(); //hi 3 4 var hello = "hello"; 5 console.log(hello); //hello 6 7 function sayHi() { 8 console.log("hi"); 9 }