javascript中的變數提升以及for迴圈中let和var的區別
阿新 • • 發佈:2020-12-28
技術標籤:前端jsjavascript
變數提升
js中函式及變數的宣告都將被提升到函式的最頂部。變數可以在使用後再宣告,也可以總是先宣告再使用。
需要注意,只有宣告的變數會提升,初始化的不會。
x=6;
console.log(x);
var x; //宣告變數x
//控制檯輸出6
console.log(x);
var x = 6; //初始化x
//控制檯輸出 undefined
for迴圈中let和var的區別
(這個問題在使用uni-app寫app的時候出現的,h5執行時var和let在for迴圈中的效果是一樣的,執行到移動裝置的時候就出現問題了。)
for (var i = 0; i < 10; i++) {
setTimeout(function() { // 同步註冊回撥函式到 非同步的 巨集任務佇列。
console.log(i); // 執行此程式碼時,同步程式碼for迴圈已經執行完成
}, 0);
}
輸出結果:
// i雖然在全域性作用域宣告,但是在for迴圈體區域性作用域中使用的時候,變數會被固定,不受外界干擾。
for (let i = 0; i < 10; i++) {
setTimeout(function() {
console.log(i); // i 是迴圈體內區域性作用域,不受外界影響。
}, 0);
}
輸出結果:
var和let的區別
1.使用var宣告的變數,其作用域為該語句所在的函式內,且存在變數提升現象;
2.使用let宣告的變數,其作用域為該語句所在的程式碼塊內,不存在變數提升;
3.let不允許在相同作用域內,重複宣告同一個變數。
4.let會有暫時性死區:如果存在全域性變數tmp,但是塊級作用域內let又聲明瞭一個區域性變數tmp,導致後者繫結這個塊級作用域,那麼在let宣告變數前,使用tmp都會報錯。