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

Javascript глобальная переменная с 'var' и без 'var'

Возможный дубликат:
Разница между использованием var и не использованием var в JavaScript

Я понимаю, что я всегда должен использовать 'var' для определения локальной переменной в функции.

Когда я определяю глобальную функцию, какая разница между использованием 'var'?

Некоторые примеры кода, которые я вижу в Интернете,

var globalVar = something;
globalVar = something;

Какая разница?

4b9b3361

Ответ 1

Ну, разница в том, что технически простое присваивание как globalVar = 'something'; не объявляет переменную, это присваивание просто создает свойство для глобального объекта, и тот факт, что глобальный объект является последним объектом в цепочке областей видимости, делает его разрешимым.

Другим отличием является способ привязки, переменные привязаны как "не подлежащие удалению" свойства его записи среды, например:

var global1 = 'foo';
delete this.global1; // false

global2 = 'bar';
delete this.global2; // true

Я бы настоятельно рекомендовал вам всегда использовать инструкцию var, ваш код, например, будет разбит в соответствии с строгим режимом ECMAScript 5, присвоения незаявленным идентификаторам запрещены, чтобы избежать неявных глобальных привязок.

Ответ 2

Короткие: нет никакой разницы в глобальном контексте **.

Long: объект Variable для глобального контекста - это сам глобальный контекст. Вот почему мы можем просто получить доступ к глобальным variables и methods в контексте функции или eval. Однако оператор var просто гарантирует, что вы определяете переменную в текущем контексте, поэтому не имеет значения, опуская это в глобальном контексте. Исключение: строгий режим ES5, вероятно, вызовет ошибку, если он увидит объявление без var.


** единственное отличие состоит в том, что var объявит переменную без определения в текущем (исполняемом) контексте. Это происходит в js parse time, поэтому движок знает, что есть переменная с этим именем, доступным в контексте. Опускание var приведет к прямому доступу к свойствам из global object.

Ответ 3

Вне любой функции в браузере нет разницы между использованием var или нет в отношении области видимости. В обоих ваших примерах globalVar является членом window.

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