2011-01-26 2 views
1

мы должны объявить переменную JS, как это:Переменная JavaScript

var x=5; 

или просто простой, как этот

x=5; 

что разница ... это будет влиять на функциональность переменной ? ...

ответ

4

variable_name = 5 всегда поставит variable_name в глобальный объект (который window в браузере)

Если вы находитесь в (= не в контексте функции) в global context два утверждения являются в основном то же самое. Но если вы находитесь в контексте функции, var гарантирует, что эта переменная объявляется только в текущем контексте.

Так, например:

function foobar() { 
    bar = 55; 
} 

foobar(); 

window.bar === 55 // true 

Лучше:

function foobar() { 
    var bar = 55; 
} 

window.bar === 55 // false 

Вывод: всегда использование var в контексте функции. Это позволяет избежать слияния/переопределения глобального объекта с помощью переменных.

+0

+1 для упоминания 'window' как глобального объекта в среде браузера. – alex

+0

, если функция объявила такую ​​переменную, функция (typ) {var typ;} должна ли мы это сделать? чтобы избежать переопределения глобального объекта ... – theHack

+1

@Afrig: no. Состоящий под названием «Объект активации» действительно заботится обо всех ваших переданных аргументах. Он доступен только в контексте функции. – jAndy

0

var keyword ограничивает область действия переменной текущей функцией. Оставляя это, он становится глобальным. Globals are bad и should be avoided, поскольку они являются ключевым источником условий гонки и скриптов, мешающих друг другу.

-8

Не имеет значения - со вторым (x = 5;) переменная автоматически объявляется, если она еще не существует.

Однако я всегда использую первый вариант.

+1

Это, безусловно, *. * Изменение. 'function a() {var x = 1; } x = 0; а(); Оповещение (x.toString()); '. Избавьтесь от 'var' и посмотрите, не изменились ли ваши результаты. – cHao

0

x=5 означает, что эта переменная (после выполнения) станет глобальной и может быть доступна всем остальным частям вашего кода (а также другим javascripts).

в то время как var x=5 будут знакомы только блок, который был объявлен на, (и это потомки)

Обратите внимание, что хотя x=5 будет глобальным, он станет глобальным только тогда, когда эта линия казнить! Итак, если вы поместите это внутри функции, он станет глобальным только после того, как эта функция будет вызвана (впервые).

Смежные вопросы