2016-10-18 10 views
-1

Я пытаюсь запустить код ниже в браузере. Я думал, что свойство window.a и глобальное a - та же ячейка в памяти. Может кто-нибудь, пожалуйста, дайте мне ссылку на статью, которая объясняет это поведение.Разница между свойствами окна и глобальной переменной

// undefined 
// if (window.a) {} 

// Uncaught ReferenceError: a is not defined 
// if (a) {} 

ответ

-1

Они одинаковы:

a = 1; 
a === window.a // true 

Edit: К сожалению, было немного слишком быстро, там ... Я diddnt ответить на что-нибудь. Эта статья объясняет разницу довольно хорошо: https://javascriptweblog.wordpress.com/2010/08/16/understanding-undefined-and-preventing-referenceerrors/

«Справочный считаются неразрешимыми, если его базовое значение не определенно»

window.a // base value is window, reference object is a 
a // base value is a 
+0

Вопрос содержит код, показывающий различное поведение для двух переменных. Ответчик знает, что две ссылки будут равны, если задано 'a', они спрашивают, почему они ведут себя по-другому, когда' a' не задано. – Hecksa

+0

Вы правы. Обновлен ответ. – ugreen

+0

Спасибо за это, удалил мой downvote. – Hecksa

0

window является объектом, и пытается получить доступ к ключу, который не был задан объект всегда возвращает undefined, даже если переменная a не была установлена.

var a = {} 
a.b 
>>> undefined 

Разница заключается в том, что a делает переменный поиск (и терпит неудачу, потому что вы не определили его), и window.a делает поиск свойства на window объекте, который возвращает undefined.

+0

Я это понимаю. Но когда я пытаюсь получить глобальную переменную, фактически возвращаю свойство из глобального объекта. –