Как мы знаем, JavaScript не имеет BLOCK SCOPE
, поэтому, когда я написал цикл, как показано ниже:Как объявить переменную курсора в javascript?
list = [1, 2, 3, 4];
// notice about the `var` keyword
for(var i = 0; i < list.length; ++i) {
// Do something.
}
console.log(i); // shows 4
Дело в том: я должен использовать var
объявить переменную i
?
ЕСЛИ ТАК:
Когда у меня есть два или более последовательный цикл, я хочу использовать тот же курсор переменной i
, она будет объявить более чем один раз! Это просто проблема!
for(var i = 0; i < list1.length; ++i) {
// do something.
}
for(var i = 0; i < list2.length; ++i) {
// do something.
}
// `i` was declared more than once!
В этой форме, переменная курсора i
может быть объявлен более чем один раз, а сам код означает, что переменная i
может иметь объем внутри для блока, но на самом деле не является.
ЕСЛИ НЕ ТАК:
Должен ли я явно объявить все для курсоров ранее в функции?
var i, j, k; // and maybe a long list that I didn't expected?
// Maybe some other code.
for(i = 0; i < count1; ++i) {
// do something
}
for(j = 0; j < count2; ++j) {
// do something
}
for(k = 0; k < count3; ++k) {
// do something
}
Если я код таким образом, я думаю, что код ужасен: он имеет большое расстояние между декларацией и использованием, а также неясной о том, что они при объявлении.
Если я опускаю объявления для них всех и просто использую, эти переменные курсора попадают в globals! Это намного страшнее!
Так что я прошу о хорошей практике, как объявить переменную курсора в этом случае?
Вам нужна ваша помощь.
В блоке есть область видимости _some_ JavaScript: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let –
@MattBall хорошо, но, похоже, она не получила широкого распространения, я не смог использовать его под хром-отладчиком. –
Оба способа делают то же самое, и обе практики хорошо установлены. – Bergi