對于所有的變量,無論在函數體的何處進行聲明,都會在后臺被提升到函數的頂部。
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"); };