1. 程式人生 > 其它 >javascript中的變數提升以及for迴圈中let和var的區別

javascript中的變數提升以及for迴圈中let和var的區別

技術標籤:前端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都會報錯。