簡體   English   中英

在全局范圍內使用“let”創建的變量與在循環內使用“var”創建的變量

[英]variable created with “let” in global scope vs variable created with “var” inside a loop

我試圖獲得JavaScript中的變量聲明的一些經驗。 在下面的代碼中,每當我嘗試使用var關鍵字在循環內定義變量時,它會拋出一個錯誤:

“未捕獲的SyntaxError:標識符'i'已經被聲明”。

而如果我使用“let”關鍵字(或根本沒有關鍵字),則沒有問題。 我知道在我不使用任何關鍵字的情況下,JavaScript在全局范圍內使用相同的變量並覆蓋它。 我也知道用“let”關鍵字創建的變量被認為是塊范圍,在函數外部用“var”關鍵字創建的變量被認為是全局變量。 但我不明白這種行為! 如果有人能夠對這個問題有所了解,我將不勝感激。

這段代碼:

let i = 78;
console.log(i);
for (var i = 0; i < 4; i++) {
    console.log(i);
    var insideloop = 100;
}

的console.log(ⅰ); 出現此錯誤:未捕獲的SyntaxError:標識符'i'已被聲明

但這個沒有問題,給出以下輸出:

let i = 78;
console.log(i);
for (let i = 0; i < 4; i++) {
    console.log(i);
    var insideloop = 100;
}
console.log(i);

結果:78 0 1 2 3 78

在全局范圍內的任何塊內使用var聲明的變量不是該塊的本地變量(在您的情況下是其for循環塊),但它們位於全局范圍內。

因此,在您的第一個示例中,您嘗試使用let重新聲明已在全局范圍內聲明的變量i

 for(var i =0;i<5;i++){} console.log(i); //i is in global scope 

凡為let如果你的情況下宣布任何阻止其限定的for循環塊。 它不在外面。

 for(let i =0;i<5;i++){} console.log(i); //i is in global scope 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM