JS面試知識點 變數提升
變數提升,也可以說成是變數宣告提升,是指在Javascript中變數的宣告會被提到作用域的頂部,而變數的賦值留在原地,具體我們可以看看下面這個問題:
Q : 下面的這段程式碼執行結果是什麼?
var a = 1;
function test(){
console.log(a);
var a = 2;
}
test();
如果你至今還不知道什麼是變數提升,你可能會認為在函式test外部已經宣告並賦值了a=1,
那麼函式內部第一行的log結果應該就是 1 。那我們把程式碼複製進瀏覽器看看結果吧:

輸出結果為 undefined

其實,按照本文上面對變數提升的說明,也就不難理解了,實際程式碼執行的順序應當是這樣的:
var a = 1;
function test(){
var a; //宣告被提前
console.log(a);
a = 2; //賦值留在原地
}
test();
值得一提的是:如果把變數宣告的關鍵字 var 換成 let ,則會出現一個如下的錯誤:
VM515:3 Uncaught ReferenceError: a is not defined
你理解了嗎?
在這裡提出另一點思考,如果我把程式碼稍作修改:
var a = 1;
function test(){
console.log(a);
a = 2;
}
test();
結果會是怎樣呢?
如果有正在學web前端的小夥伴,可來我們的學習扣qun哦:86772,6593裡面免費送視訊教程。小編也是一名從事了5年web前端開發的工程師,花了近一個月整理了一份較適合18年學習的乾貨,以及我這五年的工作經驗,分享給每一位想學web前端的小夥伴,這裡是web前端學習者聚集地,歡迎初學和進階中的小夥伴。