在大量的代码示例我看到周围的互联网,全局变量,如innerWidth
,onresize
,navigator
,等,被写为window.innerWidth
,window.onresize
,window.navigator
分别。
为什么这些全局变量中的某些优先于window.
其他全局变量,例如document
,console
通常不优先?
编辑:
我知道OOP的工作原理,而且我正在访问window
对象的各种属性。我不是JavaScript的新手。很抱歉,我的问题可能不清楚。我已经用JS编程多年了,但是从未质疑过这个约定,因此是我的问题。
本质上,我是在问为什么我们不放在window.
前面document
,而我们放在前面innerWidth
。这仅仅是一个清晰的问题吗?从理论上讲,我不应该能够在没有window.
前缀的情况下引用任何全局变量并且没有问题吗?
不幸的是,但是window
在您的浏览器中是指一个对象,该对象代表两个逻辑上不同的概念:
从语义上讲,最好不要在与Window概念无关的全局变量前加上前缀window.
。
现在请注意,当您像这样引用全局特定变量时,这会带来一个问题myThing
:很难知道您是在故意引用全局变量还是在某个中间范围中声明了全局变量(或者是否只是忘记使用以下方法声明变量: var)。这会导致您window.
不仅要用于Window实例的属性,而且还会将其用于特定的全局变量。当然,在实践中,您将尽可能避免使用全局变量。
不带前缀window.
还具有一个优势,当您忘记var
声明或库导入时,可以使代码以一种微妙的方式快速失败(这比以一种难以调试的方式使生产失败):
window.undeclaredVariable // no error, just an undefined value
undeclaredVariable // reference error
如果将这两个概念(节点中类似global
或类似root
)区分开来,JavaScript可能会更好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句