По сравнению с C/C ++ цикл в Ecmascript не может создать локальный контекст.
Кода -копия выглядит следующим образом:
for (var k in {a: 1, b: 2}) {
предупреждение (k);
}
предупреждение (k); // Несмотря на то, что петля закончилась, переменная k все еще находится в текущей области
В любое время переменные могут быть объявлены только с помощью ключевого слова VAR.
Заявление о присвоении выше:
a = 10;
Это просто создает новое свойство для глобального объекта (но это не переменная). «Не переменная» не означает, что она не может быть изменена, но означает, что она не соответствует концепции переменной в спецификации ECMASCRIPT, поэтому она «не является переменной» (причина, по которой она может стать свойством глобального объекта, заключается в том, что в Global Object есть глобальный объект. Такая операция заключается не в том, чтобы объявить переменную, а добавлять свойство к глобальному объекту.
Давайте посмотрим на простой пример, чтобы проиллюстрировать проблему
Кода -копия выглядит следующим образом:
if (! ("a" в окне)) {
var a = 1;
}
предупреждение (а);
Прежде всего, все глобальные переменные - это свойства окна, а утверждение var a = 1; эквивалентен Window.A = 1;
Вы можете использовать следующий метод для определения того, объявлена ли глобальная переменная
«Имя переменной» в окне
Во -вторых, все объявления переменных находятся в верхней части области прицела, посмотрите на аналогичный пример:
Кода -копия выглядит следующим образом:
оповещение ("a" в окне);
var a;
В настоящее время, хотя объявление после предупреждения, оповещение появляется все еще верно, потому что двигатель JavaScript сначала подметает все объявления переменных, а затем перенесет эти переменные объявления на вершину. Окончательный эффект кода заключается в следующем:
Кода -копия выглядит следующим образом:
var a;
оповещение ("a" в окне);
В -третьих, вам необходимо понять значение вопроса, что объявление переменной является продвинутой, но назначение переменной не так, поскольку эта строка кода включает в себя объявление переменной и назначение переменных.
Вы можете разделить оператор на следующий код:
Кода -копия выглядит следующим образом:
var a; // Заявление
a = 1; // Инициализировать назначение
Таким образом, подводя итог, когда объявление и назначение переменной используется вместе, двигатель JavaScript автоматически разделяет его на две части для продвижения объявления переменной. Шаг назначения не является продвижением, потому что это может повлиять на выполнение кода и достичь неожиданных результатов.
Код в вопросе эквивалентен:
Кода -копия выглядит следующим образом:
var a;
if (! ("a" в окне)) {
a = 1;
}
предупреждение (а);
Согласно анализу вышеуказанного примера, если переменная объявлена, вы должны добавить VAR перед объявленной локальной переменной. Если объявленная глобальная переменная, вы не можете добавить VAR (лучше всего ограничить количество глобальных переменных и попытаться использовать локальные переменные)
Следующее описывает несколько функций использования VAR
Использование оператора VAR для объявления переменной несколько раз является не только законным, но и не вызывает никаких ошибок.
Если повторно используемое объявление имеет начальное значение, оно служит только оператором назначения.
Если повторно используемое объявление не имеет начального значения, оно не окажет никакого влияния на исходную переменную.
Переменные без объявлений VAR существуют как глобальные переменные; Переменные с объявлениями VAR принадлежат локальным переменным, особенно внутренним функциям. И, после тестирования, быстрее объявлять с VAR, чем не с VAR. Установите как можно больше локальных переменных в функции, которая является безопасной и быстрой, а операции переменной являются более разумными, и не будет логических ошибок, вызванных случайной работой глобальных переменных в функции.
Лучше всего использовать собственный личный метод объекта при объявлении объекта, так как эта скорость намного быстрее, чем новый метод.
Имя переменной принимается на вас. Чтобы позаботиться о семантике и спецификациях, имя переменной может быть немного длиннее, но будьте осторожны, длина имени переменной также повлияет на скорость выполнения кода. Объявления с длинной переменной не так быстры, как короткие.