我尝试在浏览器中运行下面的代码。我认为属性window.a
和全球a
是内存中的同一个单元格。有人可以给我一个链接到一篇文章来解释这种行为。窗口属性和全局变量的区别
// undefined
// if (window.a) {}
// Uncaught ReferenceError: a is not defined
// if (a) {}
我尝试在浏览器中运行下面的代码。我认为属性window.a
和全球a
是内存中的同一个单元格。有人可以给我一个链接到一篇文章来解释这种行为。窗口属性和全局变量的区别
// undefined
// if (window.a) {}
// Uncaught ReferenceError: a is not defined
// if (a) {}
它们是相同的:
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
window
是一个对象,并且试图访问不是设置上的键对象始终返回undefined
,即使变量a
尚未设置。
var a = {}
a.b
>>> undefined
不同的是,a
做一个变量查找(和失败,因为你没有把它定义),并window.a
是否window
对象,它返回undefined
上的属性查找。
我明白了。但是当我尝试获取全局变量时,实际上是从全局对象返回属性。 –
问题包含显示两个变量的不同行为的代码。提问者知道,如果设置了'a',那么两个引用将相等,他们问为什么他们在没有设置'a'时表现不同。 – Hecksa
你说得对。更新了答案。 – ugreen
谢谢你,删除我的downvote。 – Hecksa