虽然是假设,但这个案子让我感到困惑。 你认为这是可能的,如果是的话 - 如何
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; ...)
,但i
和k
可以同时声明不知何故分别是var
和let
?
答案 0 :(得分:3)
不,语法不允许这样做。您只能在循环头中拥有其中一个关键字var
,let
和const
(或根本没有)。
解决方法是将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();