对于所有的变量,无论在函数体的何处进行声明,都会在后台被提升到函数的顶部。
1.对于非函数变量
var str = 'hello world'; (function() { console.log(str); //undefined var str = "hello javascript"; })();
PS: 只提升变量的声明,并不会把赋值也提升上来,
所以在声明变量时最好在相应作用域的顶部声明并赋值
2.函数提升
foo(); //hello world console.log(bar); //undifined bar(); //error:bar is not a function function foo() { //函数声明和定义都会被提升 console.log("hello world"); } var bar = function() { //函数表达式只有声明会被提升,但是定义不被提升 console.log("hello javascript"); };