Требуется ли var при объявлении переменных Javascript?

Возможный дубликат:
Javascript: использует 'var' для объявления переменных необязательно?

При создании переменных в javascript добавляется "var" перед именем переменной a must?

Например, вместо

var message = "Hello World!"

Можно ли использовать

message = "Hello World!"

?

Я заметил, что скрипты, такие как Google Adsense, не используют var

Пример:

google_ad_width = 160;
google_ad_height = 600;
google_color_border = "000000";
google_color_bg = "ffffff";

Ответ 1

Если вы не объявляете переменную (явно создаете ее в текущей области видимости) с помощью var, let или const, то (в нестрогом режиме) вы создаете неявную глобальную переменную.

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

Если вы используете var, область действия переменной ограничена текущей функцией (и всем, что внутри нее - возможно вложение функций).

(Константы области видимости const и let и переменные для текущего блока вместо функции, обычно делают управление переменными еще проще, чем var.)

Google Adsense использует глобальные переменные, потому что он разбивает скрипты на две отдельные части (одну локальную и одну удаленную). Более чистым подходом было бы вызвать функцию, определенную в удаленном сценарии, и передать параметры в качестве аргументов вместо того, чтобы вызывать их из глобальной области видимости.


Современный JS должен быть написан в строгом режиме, который запрещает неявные глобальные переменные (предпочитая вместо этого явно объявлять их на верхнем уровне, таким образом предотвращая случайные глобальные переменные, когда имя переменной опечатано).

Ответ 2

Да, вы всегда должны использовать var.

Не использовать var имеет два основных недостатка:

  • Доступ к переменной внутри функции, которая не определена внутри этой функции, заставит интерпретатора искать цепочку областей видимости для переменной с этим именем, пока не найдет ее или не получит глобальный объект (доступный в браузерах через window), где он создаст свойство. Это глобальное свойство теперь доступно повсеместно, что потенциально вызывает путаницу и трудно обнаруживаемые ошибки;
  • Доступ к необъявленной переменной приведет к ошибке в строгом режиме ECMAScript 5.

Кроме того, не использовать var для глобальной переменной не совсем то же самое, что использовать var: при использовании var свойство, которое он создает на глобальном объекте, имеет внутренний атрибут DontDelete, который не является случай без var:

// Next line works in any ECMAScript environment. In browsers, you can
// just use the window object.
var globalObj = (function() { return this; })();

var x = 1;
delete globalObj.x;
alert(x); // Alerts 1, x could not be deleted

y = 2;
delete globalObj.y;
alert(y); // Error, y is undefined

Ответ 3

С http://www.updrift.com/article/to-var-or-not-to-var-my-javascript

  1. Для глобальных переменных это не имеет значения, но вы можете использовать его для согласованности.
  2. Всегда пытайтесь использовать 'var для объявления переменных в локальных функциях. Это гарантирует, что вы используете локальную копию переменной вместо другой переменной с тем же именем в другой области видимости.

Например, две подобные функции здесь имеют очень разные эффекты:

var myvar = 0;
function affectsGlobalVar(i){
   myvar = i;
}
function doesNotAffectGlobalVar(i){
   var myvar = i;
}

Ответ 4

Без var переменная определяется как глобальная.

Ответ 5

При добавлении Google AdSense на свою страницу вы связываете несколько файлов javascript. Переменные определены там.

http://pagead2.googlesyndication.com/pagead/show_ads.js должно быть одной из ссылок script на вашей странице.

Ответ 6

Для непросвещенного, как я, JavaScript в основном имеет две области для переменных: глобальный и локальный. Переменные, назначенные за пределами функции являются глобальными, а переменные назначается внутри функции, используя ключевое слово var, являются локальными (не ракеты) хирургия). Однако, если вы покинете var keyword off, он назначает глобальную переменная, независимо от того, где ее объявлено.

От: http://opensoul.org/2008/9/4/the-importance-of-var-in-javascript