Хотя гипотетический, этот случай озадачил меня. Считаете ли вы это возможным, и если да - как
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
соответственно так или иначе?
Нет, это не допускается грамматикой. Вы можете иметь только одно из ключевых слов var
, let
и const
в const
цикла (или вообще ничего).
Решение состоит в том, чтобы просто поместить var
вне заголовка цикла, что является хорошей практикой в любом случае, если вы хотите использовать его после цикла:
function count() {
var i = 0;
for (
let k = 0;
i < 10;
i++, k++
) {
…
}
console.log( i ); // 10
console.log( k ); // ReferenceError
}
count();
Объявите переменную с ограниченной функциональностью вне цикла for. Такой вид происходит в любом случае, когда вы используете ключевое слово var в цикле for (var i=...)
, объявление получает подъем. Затем вы можете использовать let внутри цикла for, чтобы получить область уровня блока. Вы даже можете использовать 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();