JavaScript:如何在for循环中同时声明var和let变量

时间:2018-06-17 12:10:04

标签: javascript ecmascript-6 ecmascript-5

虽然是假设,但这个案子让我感到困惑。 你认为这是可能的,如果是的话 - 如何

function count() {

    for (
        let i = 0, k = 0; // <<< can this become sth like 'var i = 0; let k = 0' ?
        i < 10; 
        i++, k++ 
    ) { 
        ...
    }

     // ... so that these log as follows:
     console.log( i ); // 10
     console.log( k ); // undefined or Error
}

count();

注意:可以声明for (let i=0, k=0; ...)for (var i=0, k=0; ...),但ik可以同时声明不知何故分别是varlet

2 个答案:

答案 0 :(得分:3)

不,语法不允许这样做。您只能在循环头中拥有其中一个关键字varletconst(或根本没有)。

解决方法是将var放在循环头之外,如果你想在循环之后使用它,这是一个很好的做法:

function count() {
    var i = 0;
    for (
        let k = 0;
        i < 10; 
        i++, k++ 
    ) { 
        …
    }

    console.log( i ); // 10
    console.log( k ); // ReferenceError
}
count();

答案 1 :(得分:2)

在for循环外声明函数范围的变量。当你在for循环for (var i=...)中使用var关键字时,无论如何都会发生这种情况,声明会被提升。然后你可以在for循环中自由使用let来获得块级范围。您甚至可以对两个声明使用let,因为它们现在不依赖于var。

提供的提升

function count() {
    var i = 0;
    // or let i = 0;
    for (
        let k = 0;
        i < 10; 
        i++, k++ 
    ) { 
        // 
    }

     // ... so that these log as follows:
     console.log( i ); // 10
     console.log( k ); // undefined or Error
}

count();