變量提升: 提升變量的聲明。 函數聲明式: 像這種形式: function foo() {}; 會發生變量提升。 函數表達式: var fn=function fn(){}; 不會發生變量提升。
var a = 1; 會將 a 的聲明提升
a = 1; 等價於 window.a = 1;
代碼解析:
function test() { a = 5; log(a); log(window.a); var a = 10; log(a); } test(); 上面代碼執行過程>>>>>>> 1.將var 的變量提升聲明 ,提升到當前的範圍內最高作用域中, 此時a的聲明被提升到function的作用域中(如不var:函數內的 a 會放到window下 : window.a = 5) 2.賦值5 給a 3.打印a 會出現5 4.打印window.a 會出現undefined(爲什麼打印出undefined,因爲最開始時將var 的變量聲明提升到了當前的function作用域中) 5.將 10 重新賦值給 a 6.打印a 結果 10