眾所周知吧黄,JavaScript 中存在變量提升的問題,在 ES6 引入的新關鍵詞 let 可以很方便的解決這個問題拗慨,不過這篇文章的目的不是解決變量提升的問題,而是討論為什么會有變量提升這種現(xiàn)象剧蹂。
以前對這個問題根本沒有想過,在看了 《你不知道的 js 》這本書后烦却,才開始考慮并且明白了其中的原因。
變量提升的根本原因是變量聲明與賦值的分離其爵,舉個例子 var a = 2;這個代碼是分兩步進行的摩渺。首先是 var a 這一部分的變量聲明,這個過程是在代碼編譯時進行的证逻。然后是 a = 2; 這一部分的變量賦值抗斤,這個過程是在代碼執(zhí)行時進行的丈咐。
代碼先編譯一遍然后才執(zhí)行,這樣下面的變量提升的代碼就容易解釋了棵逊。
console.log(a)
var a = 2;
b = 3;
var b;
console.log(b)
在這段代碼編譯的過程中,a 與 b 都進行了聲明徒像,代碼執(zhí)行的過程中先打印 a ,因為 a 只是聲明了還沒有賦值蛙讥,所以結(jié)果是 undefined锯蛀。后打印 b 次慢,因為 b 的賦值在打印的前面,所以結(jié)果是 3.