2016-10-18 26 views
-1

我尝试在浏览器中运行下面的代码。我认为属性window.a和全球a是内存中的同一个单元格。有人可以给我一个链接到一篇文章来解释这种行为。窗口属性和全局变量的区别

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

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

回答

-1

它们是相同的:

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

编辑:对不起,有点太快了那里......我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

我明白了。但是当我尝试获取全局变量时,实际上是从全局对象返回属性。 –

相关问题