2010-10-08 2 views
50

Можно создать дубликат:
Javascript: is using 'var' to declare variables optional?Требуется ли var при объявлении переменных Javascript?

При создании переменных в JavaScript добавляет "вар" перед именем переменной А должно?

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

var message = "Hello World!" 

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

message = "Hello World!" 

?

Я заметил, что сценарии, такие как Google Adsense не использовать уаг

Пример:

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

Зачем стоит тэг PHP? – BoltClock

+6

Я сделал поиск SO, основанный на названии вашего вопроса. Это первый результат, который я получил: http://stackoverflow.com/questions/2485423/javascript-is-using-var-to-declare-variables-optional – user113716

ответ

92

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

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

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

+0

Это совершенно разумно! – V777

+1

+1 Желание Я знал это несколько дней назад, когда на самом деле пытался создать глобальную переменную, и все, что у меня получилось, было неопределенным. OO –

+1

Кроме того, ссылаясь на переменную, которая не была объявлена, выдается ошибка в строгом режиме ECMAScript 5 , –

1

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

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

3

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

4

От 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; 
} 
1

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

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

+0

Очень в основном говоря, это правильно. Однако могут быть вложенные локальные области. Функция var, объявленная в функции внутри другой функции, не может быть доступна родительской функцией. – treeface

7

Да, вы должны всегда использовать 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 
Смежные вопросы