在編程語言中通常都會使用到for循環這個方法,來一塊兒瞭解一下for循環有意思的地方編程
for(var i = 0; i < 6; i++) { //do something } console.log(i) // 6
因爲在原生的js中沒有塊級做用域這個說法,因此即便是在for循環中定義的i,在for循環以外也是可以訪問到i這個變量編程語言
for(let i = 0; i < 6; i++) { //do something } console.log(i) // Uncaught ReferenceError: i is not defined
這裏會顯示一個i爲未定義的引用報錯,由於此次的i是經過let來進行定義的變量
let是ES6中新引入的一個定義變量的方法,這個方法可使得定義的變量屬於塊級做用域(一對大括號包起來算是塊級做用域).在塊級做用域外不能訪問變量函數
for(let i = 0; i < 6; i++) { let i = 'ace'; console.log(i); // 輸出6次ace }
能夠在這看到在for的做用域中定義了一個新的i,而且打印出當前做用域i出來.引入一個內容code
let i = 0; let i = 'ace'; //Uncaught SyntaxError: Identifier 'i' has already been declared
這裏會報錯,由於用let定義的變量不可以重複進行聲明
因此大膽猜想一下,可是沒有進行驗證,上面循環的形式大概是這樣子的作用域
{ let i = 0; // 循環前數值的初始化 { // 執行循環內的函數 let i = 'ace'; console.log(i); // 在這裏能夠看到先後兩個i的做用域是不同的,當內層的做用域找不到i的時候,會向上繼續找,直到找到爲止 } i++ if ( ! i < 6 ) return // 循環退出的條件 }
一樣的另一個例子字符串
for (var i = 0; i<6; i++){ var i = 'ace'; console.log(i); // ace } console.log(i) // NaN 由於在執行i++的時候i變成了字符串,因此會是NaN,而且不符合繼續循環的判斷條件