Определение объема для цикла в 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 переменная без повторного выделения, которая все равно будет работать нормально.

Другие вопросы по тегам