Подтвердить что ты не робот

Область переменной в Javascript for loop

Какая разница между:

function bar()
{
  for (x=0; x< 100; x++) {}
}

и

function bar()
{
  var x;
  for (x=0; x< 100; x++) {}
}

Если x не было объявлено вне этой функции, и поэтому это не глобальная переменная? Я всегда удивляюсь этому, потому что я вообще не объявляю переменные throwaway, которые используются только в цикле, но мне интересно, может ли это нарушить сопоставимость в браузере или таком.

4b9b3361

Ответ 1

Первый пример может либо добавить, либо изменить глобальную переменную x, которой обычно следует избегать, если не желаемый результат.

Пока ваш второй пример работает по желанию (никаких побочных эффектов), альтернатива, которая выглядит лучше, на мой взгляд, будет

function bar()
{
  for (var x=0; x< 100; x++) {}
}

Ответ 2

Переменная создается во время ее объявления/использования. Если вы опустите ключевое слово var, то переменная автоматически создается в глобальной области. Таким образом, вы создаете побочный эффект. Этого обычно следует избегать.

Предположим, вы используете глобальные переменные, а затем вы выбрали имя переменной, которое уже использовало еще одна часть программного обеспечения. Это приведет к ситуации, когда фрагменты кода перезаписывают их значения. Это приводит к ошибкам и большую часть времени отлаживается. В вашем примере вы можете переписать глобальную переменную x, которую использует другое программное обеспечение.

Использование var также выполняется быстрее. Если вы обращаетесь к глобальной переменной, она должна сканировать все области действия до глобального для имени переменной. Используя var, он привязан к вашей локальной области.

Хорошая практика всегда использовать var. Или лучше: всегда полезно выбрать наиболее суженный диапазон для ваших переменных. Теперь у вас есть глобальный и var. Объявление var отображается во всей функции независимо от того, где вы ее объявляете. В javascript 1.7 появилось новое ключевое слово: let. Пусть сужает масштаб еще больше. Если вы объявите цикл for с помощью

for(let x = 0; x < 100; i++) {}

чем x, видимо только внутри блока {}.

Ответ 3

Всегда помните, что в JavaScript области определяются функциями. В примере

function () {
    var x = 15;
    bar();
    function bar() {
      for (x=0; x< 100; x++) {}
    }
    //here x will be 100
}

Вы можете случайно получить доступ к более широкому пространству. Я имею в виду более высокую область действия - это функция-оболочка или window.x(если больше нет функции-оболочки). Гораздо лучше придерживаться второго примера, если вы просто хотите использовать x для своего цикла.

function () {
    var x = 15;
    bar();
    function bar() {
        var x;
        for (x=0; x< 100; x++) {}
    }
    //here x will be 15
}