为什么我们在全局变量前加上“ window。”?

马库斯·麦克林

在大量的代码示例我看到周围的互联网,全局变量,如innerWidthonresizenavigator,等,被写为window.innerWidthwindow.onresizewindow.navigator分别。

为什么这些全局变量中的某些优先于window.其他全局变量,例如documentconsole通常不优先?

编辑:

我知道OOP的工作原理,而且我正在访问window对象的各种属性我不是JavaScript的新手。很抱歉,我的问题可能不清楚。我已经用JS编程多年了,但是从未质疑过这个约定,因此是我的问题。

本质上,我是在问为什么我们不放在window.前面document,而我们放在前面innerWidth这仅仅是一个清晰的问题吗?从理论上讲,我不应该能够在没有window.前缀的情况下引用任何全局变量并且没有问题吗?

丹尼斯·塞古雷

不幸的是,但是window在您的浏览器中是指一个对象,该对象代表两个逻辑上不同的概念:

  • Window的实例,该对象具有定义良好的属性(如Window.innerWidth),在逻辑上映射到浏览器的窗口(或者今天是选项卡,但是该区别在脚本中隐藏了)
  • 所有全局变量作为属性附加到全局对象

从语义上讲,最好不要在与Window概念无关的全局变量前加上前缀window.

现在请注意,当您像这样引用全局特定变量时,这会带来一个问题myThing:很难知道您是在故意引用全局变量还是在某个中间范围中声明了全局变量(或者是否只是忘记使用以下方法声明变量: var)。这会导致您window.不仅要用于Window实例的属性,而且还会将其用于特定的全局变量。当然,在实践中,您将尽可能避免使用全局变量。

不带前缀window.还具有一个优势,当您忘记var声明或库导入时,可以使代码以一种微妙的方式快速失败(这比以一种难以调试的方式使生产失败):

window.undeclaredVariable // no error, just an undefined value
undeclaredVariable // reference error

如果将这两个概念(节点中类似global类似root)区分开来,JavaScript可能会更好

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 Spark Window 函数中,为什么我们需要在最后使用 drop()

来自分类Dev

为什么我们不能使用C中的表达式为全局变量赋值?

来自分类Dev

没有全局变量的window.onload

来自分类Dev

设置全局变量并包装在$(window).load中

来自分类Dev

我们可以不再使用 window.open()

来自分类Dev

为什么我不能增加全局变量

来自分类Dev

为什么我的全局变量不起作用?(蟒蛇)

来自分类Dev

为什么我的全局变量为null?

来自分类Dev

为什么我的mod_python全局变量被重置?

来自分类Dev

为什么我的函数不将值返回全局变量?

来自分类Dev

为什么我不能访问该全局变量?

来自分类Dev

为什么我不能访问全局变量中的值

来自分类Dev

为什么我的 for 循环不使用更新的全局变量?

来自分类Dev

全局变量是否在Pyglet window.event函数中成为局部变量

来自分类Dev

什么是全局长度变量(window.length)?

来自分类Dev

在Linux中,我们有/ etc / environment来存储全局变量。在FreeBSD中?

来自分类Dev

我们如何在引用中的 r 中使用全局变量

来自分类Dev

全局变量仅仅是“ window”对象上的属性吗?

来自分类Dev

全局变量仅仅是“ window”对象上的属性吗?

来自分类Dev

使用window.onload内部的函数更改全局变量值

来自分类Dev

“!window”和“ !! window”有什么区别?

来自分类Dev

Window和window有什么区别?

来自分类Dev

Window和window有什么区别?

来自分类Dev

为什么我们在Tensorflow中命名变量?

来自分类Dev

为什么我们需要声明枚举变量?(C)

来自分类Dev

为什么我从window.location保存的变量发生了变化?

来自分类常见问题

为什么全局变量是邪恶的?

来自分类Dev

为什么不能删除全局变量?

来自分类Dev

为什么全局变量的地址变了

Related 相关文章

  1. 1

    在 Spark Window 函数中,为什么我们需要在最后使用 drop()

  2. 2

    为什么我们不能使用C中的表达式为全局变量赋值?

  3. 3

    没有全局变量的window.onload

  4. 4

    设置全局变量并包装在$(window).load中

  5. 5

    我们可以不再使用 window.open()

  6. 6

    为什么我不能增加全局变量

  7. 7

    为什么我的全局变量不起作用?(蟒蛇)

  8. 8

    为什么我的全局变量为null?

  9. 9

    为什么我的mod_python全局变量被重置?

  10. 10

    为什么我的函数不将值返回全局变量?

  11. 11

    为什么我不能访问该全局变量?

  12. 12

    为什么我不能访问全局变量中的值

  13. 13

    为什么我的 for 循环不使用更新的全局变量?

  14. 14

    全局变量是否在Pyglet window.event函数中成为局部变量

  15. 15

    什么是全局长度变量(window.length)?

  16. 16

    在Linux中,我们有/ etc / environment来存储全局变量。在FreeBSD中?

  17. 17

    我们如何在引用中的 r 中使用全局变量

  18. 18

    全局变量仅仅是“ window”对象上的属性吗?

  19. 19

    全局变量仅仅是“ window”对象上的属性吗?

  20. 20

    使用window.onload内部的函数更改全局变量值

  21. 21

    “!window”和“ !! window”有什么区别?

  22. 22

    Window和window有什么区别?

  23. 23

    Window和window有什么区别?

  24. 24

    为什么我们在Tensorflow中命名变量?

  25. 25

    为什么我们需要声明枚举变量?(C)

  26. 26

    为什么我从window.location保存的变量发生了变化?

  27. 27

    为什么全局变量是邪恶的?

  28. 28

    为什么不能删除全局变量?

  29. 29

    为什么全局变量的地址变了

热门标签

归档