javascript中的for循環

在編程語言中通常都會使用到for循環這個方法,來一塊兒瞭解一下for循環有意思的地方編程

原生js的for循環使用

for(var i = 0; i < 6; i++) {
    //do something
}
console.log(i) // 6

因爲在原生的js中沒有塊級做用域這個說法,因此即便是在for循環中定義的i,在for循環以外也是可以訪問到i這個變量編程語言

引入ES6的let來定義變量

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,而且不符合繼續循環的判斷條件
相關文章
相關標籤/搜索