Определение объема для цикла в Javascript
Рассмотрим следующий код:
for (var x = 0; x < 10; x++) { /* do awesome stuff. 10 times! */ }
console.log(x);
x
все еще печатается в консоли.
Это дает мне предупреждения в JSHint, потому что через пару строк я делаю еще один цикл, повторное выделение x
:
for (var x = 0; x < 10; x++) { /* more awesome stuff */ }
Теперь я знаю, что JSHint не является святым Граалем, но есть ли способ предотвратить x
от утечки? (при условии, что это правильная терминология?
Я старался:
(function () {
"use strict";
for (var x = 0; x < 10; x++) { /* do awesome stuff. 10 times! */ }
console.log(x);
for (var x /* warning here */ = 0; x < 10; x++) { /* more awesome stuff */ }
})();
Так "use strict";
это не путь.
Я попытался оценить его еще глубже (и это смущает меня так же сильно, как то, что меня тошнит):
(function () {
"use strict";
{
for (var x = 0; x < 10; x++) { /* do awesome stuff. 10 times! */ }
}
console.log(x); // STILL WORKS...
for (var x /* warning here */ = 0; x < 10; x++) { /* more awesome stuff */ }
})();
И еще хуже
На линии с console.log
вызов JSHint предупреждает меня о x
используется вне области видимости И на следующей строке, которую я изменяю x
,
1 ответ
Переменные видны только для функций в JavaScript, а не для блоков. Если вам абсолютно необходимо охватить каждый цикл for отдельно, вам нужно сделать что-то вроде этого:
(function () {
for (var x = 0; x < 10; x++) { /* do awesome stuff. 10 times! */ }
})();
(function () {
for (var x = 0; x < 10; x++) { /* more awesome stuff */ }
})();
Или вы можете просто использовать x
переменная без повторного выделения, которая все равно будет работать нормально.