亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 for 循環初始化中使用 let 時,為什么 let 變量在封閉范圍內不可用?

在 for 循環初始化中使用 let 時,為什么 let 變量在封閉范圍內不可用?

慕妹3146593 2021-06-09 10:33:50
這對我來說一直是一個揮之不去的問題:如果當 alet或const標識符包含在大括號中時創建塊范圍,那么循環let的初始化語句中的標識符如何for在封閉范圍內不可用,而是在大括號內可用for循環的括號?(function() {  for (let i = 0; i < 5; i++) {   console.log(i) // logs current value of i  }  console.log(i) // referenceError})()
查看完整描述

3 回答

?
喵喔喔

TA貢獻1735條經驗 獲得超5個贊

這就是事情的運作方式。在這樣的for循環頂部聲明的變量僅在當前迭代的for塊內可見。你可以這樣想:


<loop> {

  let i = getCount();

  console.log(i) // logs current value of i

}

wheregetCount運行遞增的邏輯i。


用 with 聲明的變量let是塊范圍的 -i在外部引用是沒有意義的。如果i 是的外部可見的for,你會想到它的價值是?i對于循環的每次迭代,您已經有了一個單獨的綁定。有點隨意地選擇這些綁定之一在外面可見是沒有意義的。


查看完整回答
反對 回復 2021-06-18
?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

因為它是for循環中的局部變量,而不是在循環之外。如果您已在循環外聲明它,則可以正確訪問它。


(function() {

  let i;

  for (i = 0; i < 5; i++) {

   console.log(i);

  }

  console.log(i);

})();


查看完整回答
反對 回復 2021-06-18
?
UYOU

TA貢獻1878條經驗 獲得超4個贊

如果您不想更改語法,可以使用var.


(function() {

    for (var i = 0; i < 5; i++) {

        console.log(i);

    }

    console.log(i); 

    // this should work.

})()

否則,使用let或聲明的變量const具有所謂的塊范圍,這意味著它僅在定義它的花括號內可見。這本質上是let和之間的根本區別var。與聲明的變量var具有函數范圍(這整個功能是可見的,它的詞匯的定義,它的價值也只是甚至之前undefined)


(function() {

    console.log(i); // undefined

    var i = 10;

    console.log(i); // 10

 })();

但是上面的例子只有在沒有"use strict"任何地方時才有效。


查看完整回答
反對 回復 2021-06-18
  • 3 回答
  • 0 關注
  • 316 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號