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

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

我們必須在 JavaScript For 循環中包含 Let 關鍵字嗎?

我們必須在 JavaScript For 循環中包含 Let 關鍵字嗎?

森欄 2023-08-10 16:04:47
我正在學習 For Loops,我發現以下兩段代碼的工作原理是一樣的。代碼1:for (let i=0 ; i<bobsFollowers.length; i++){  for ( let j=0; j<tinasFollowers.length; j++){    if (bobsFollowers[i] === tinasFollowers[j]){      mutualFollowers.push(tinasFollowers[i]);    }  }}console.log(相互關注者);代碼2for (i=0 ; i<bobsFollowers.length; i++){  for ( j=0; j<tinasFollowers.length; j++){    if (bobsFollowers[i] === tinasFollowers[j]){      mutualFollowers.push(tinasFollowers[i]);    }  }}console.log(mutualFollowers);
查看完整描述

5 回答

?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

如果不包含let關鍵字,則可以全局訪問該變量


for (let i = 0; i < 3; i++) {

  console.log(i);

}


for (j = 0; j < 3; j++) {

  console.log(j);

}


console.log('j ', j); // accesible

console.log('i ', i); // inaccesible


查看完整回答
反對 回復 2023-08-10
?
烙印99

TA貢獻1829條經驗 獲得超13個贊

是的,如果您沒有let在for,for...of或for...in循環等中專門使用關鍵字,它們的工作方式將與您使用關鍵字時相同let。


但是,當您沒有顯式聲明 usinglet關鍵字時,該變量將被聲明為var. let和const是塊級變量,但您還需要了解“函數不是唯一的塊,any{ }基本上是一個塊”。即一旦聲明“var”將成為函數作用域變量,如果它不在函數內部并在外部聲明,那么它就變得全局可用,考慮到您可能有多個使用變量的 for 循環,這不是一件好事名為“i”,如果您不使用 let,它只會不斷增加舊的'i'. 請看下面兩個例子來理解我上面這句話的意思:


const test = function(){

let let1 = 1;

var var1 = 2;

{

let let1 = 9; //This is a block scoped variable limited to this { } block?

var var1 = 3; //re-initialization still overrides the original var 1 variable's value because once declared, the var variable is function scoped


console.log(let1); //9 - Block Scoped

console.log(var1); //3 - Function Scoped

}

console.log(let1); //1 - Function Scoped?

console.log(var1); //3 - Still Function Scoped, always function scoped

}


test();


我所說的全球增值的意思是'i':


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

console.log('first loop', i)

}


for(i;i< 5; i++){//I am not initializing i to 0, but I'm just trying to show that it is a global variable now.

console.log('second loop', i)

}


for(i; i< 7; i++){ //I am not initializing i to 0, but I'm just trying to show that it is a global variable now.

console.log('third loop', i)

}

其次,在 ES5 中,引入了嚴格模式,這基本上是一種可以選擇不編寫“草率模式”JS 代碼的方式,并且可以通過'use strict';全局或函數級別指定來使用它。大多數公司和開發人員在其專業代碼庫中都使用嚴格模式。

我想傳達的一點是,“嚴格模式”不允許您在不聲明變量的情況下使用 for 循環,您必須明確指定“var”或“let”關鍵字。因此,聲明變量始終是一個好習慣。

最后,在當前的 ES6 時代,使用var關鍵字聲明變量并不被認為是一個好的做法,因為稱為“提升”,這基本上意味著在聲明 a 之前var x;,如果你嘗試使用它,你仍然可以,但是它的值將是“未定義”。但如果let你在聲明變量之前不能使用它。


查看完整回答
反對 回復 2023-08-10
?
喵喔喔

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

是的,你必須。或者舊的var 正如其他回復提到的,您將在更廣泛的范圍內填充此變量。


想象一下這種情況,您需要創建一個打印前 10 個數字的函數:


function printNumbers(){

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

        console.log(i)

    }

}

這很酷?,F在您需要調用該函數 12 次,很簡單吧?


function printNumbers(){

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

        console.log(i)

    }

}


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

   printNumbers()

}

好吧,如果您在 google chrome 控制臺中執行此操作(不要)。你會燒壞你的瀏覽器的。因為i永遠不會達到 12,你將陷入無限循環。12您可以通過更改來安全地測試這一點5,您將看到該函數僅運行1time 而不是5。


因此,它不僅僅適用于您的代碼,而是適用于將來將使用您的代碼的人。你的代碼中可能會留下一個潛在的重大失敗。想象一下它在圖書館里。


查看完整回答
反對 回復 2023-08-10
?
12345678_0001

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

'let' 是關于詞法作用域的,默認情況下 JavaScript 中的變量和對象具有全局作用域。正如其他人指出的那樣,使用 var 將使變量的范圍成為全局變量,因此任何東西都可以訪問和修改它。


let 的另一個用例是在閉包中。這個例子來自 CS50 的 React Native 講座 0 和 1。


這里 makeFunctionArray 返回一個打印 i 值的函數數組。


function makeFunctionArray() {

  const array = [];

  

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

    array.push(function () { console.log(i) });

  }


  return array;

}


const functionArray = makeFunctionArray();

functionArray[0]();

現在,您期望 functionArray[0]() 打印什么?0,對嗎?因為我們正在調用索引為零處的函數,它應該控制臺日志 0。但它不會打印 0,而是打印 5。


這是因為“i”具有全局作用域,并且當循環終止時其值為 5。我們從 makeArray 函數返回的函數(閉包)仍然可以訪問“i”,并且返回時值 5 會被包含在其中。所以每個 functionArray[index]() 都會打印 5。


如果 'i' 是一個 let,則可以使用 'let' 來避免這種情況,它的作用域將僅為 'for' 循環。


查看完整回答
反對 回復 2023-08-10
?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

的范圍let僅限于該塊。但如果不指定let關鍵字,它的作用域是全局環境(瀏覽器的全局作用域是 window 對象)


{

   let a = 1;

   b = 2;

}


console.log(a) //error

console.log(b) //2


查看完整回答
反對 回復 2023-08-10
  • 5 回答
  • 0 關注
  • 204 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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