Рассмотрим следующий код:
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
.
let
используется в цикле for вместоvar
. Но, честно говоря, я бы проигнорировал JSHint. - person bozdoz   schedule 15.05.2014var
в функции обрабатываются так, как будто они произошли в начале функции. Там нет области видимости, но область действия функции. @bozdozlet
— это функция JavaScript версии 6, которая не поддерживается повсеместно. - person Pointy   schedule 15.05.2014