for 循環 var 和 let

純屬我的理解,若有問題還請指出~code

在聲明的()內存在一個變量 i,會存在 JavaScript 引擎內部。 每一次循環的時候, JavaScript 引擎內部會記住上一輪循環的值,而後將新的 i 的值賦值給 iip

for (let i = 0; i < 3; i++) {
  let i = 'abc';
  console.log(i);
}
//abc
//abc
//abc

因爲let塊級做用域,for()內的let 至關於有個隱藏的父做用域,for{}循環體內的let 是新的子做用域,從新聲明一個 i;不會影響()裏 i 的值內存

for (let i = 0; i < 3; i++) {
  i = 'abc';
  console.log(i);
}
//abc

可是若是不聲明 i,直接給 i 賦值,會影響()裏 i 的值,說明()是循環體的上一級做用域,在循環體裏直接改變 i 的值會影響上一級做用域裏的 i 值作用域

for (var i = 0; i < 3; i++) {
  var i = 'abc';
  console.log(i);
}
//abc

至關於
1 先var i;
2 再執行 for 循環
3 第一次 i = 0 知足條件 進入循環體,因爲 var 沒有塊級做用域的概念,因此會從新聲明修改for循環外全局做用域的 i 的值,從而影響了循環變量的值,致使後面條件不知足進入不到循環體,因此只輸出一次console

for (var i = 0; i < 3; i++) {
  let i = 'abc';
  console.log(i);
}
//abc
//abc
//abc

循環變量 i 是全局做用域,循環體內 let i 爲塊級做用域內的變量,不影響全局變量,輸出三次for循環

for (let i = 0; i < 3; i++) {
  var i = 'abc';
  console.log(i);
}
//Uncaught SyntaxError: Identifier 'i' has already been declared

!!! 不太理解這個爲何會報錯,但願懂得的小夥伴們給個指導
我的迷惑的地方:報這個錯是由於在同一個做用域下重複聲明變量 i,可是{}內的var i 爲 全局做用域下的 i ,()內的 let i 屬於()的做用域,兩個不一樣的做用域爲何會報錯呢???變量

相關文章
相關標籤/搜索