【发布时间】:2014-05-30 16:46:35
【问题描述】:
我正在编写一个脚本,以防止污染 DOM 的其余部分,它将是一个收集一些基本访问者分析数据的第 3 方脚本。
我通常使用类似的东西创建一个伪“命名空间”:var x = x || {};
我正在查看的其他一些人的代码使用:x = window.x || {};
我知道不设置var 会设置一个全局变量。这是唯一的区别吗?
我正在检查 Chrome 和 Webstrom 中的两个对象,它们看起来相同。
有人可以解释这两种方法之间的区别以及使用一种方法的含义(如果有的话)吗?
正如我所说,当我检查创建的对象时,它们看起来和我一模一样,但我从 JS 中学到了……外表可能具有欺骗性。
【问题讨论】:
-
第二个对我来说似乎没有意义。你能在网上举个例子吗?
-
如果你的代码要与node.js中的require.js/一起使用,你可能还需要考虑调用
define或有条件地设置module.exports -
第一个在严格模式下工作,第二个不工作,因为不允许使用隐式全局变量 - 它们必须用
var声明。 -
我认为这主要是可读性的问题。我的偏好是使用
window.x而不是恰好位于全局空间中的var x。如果您将代码转换为模块模式(您应该),那么window.x已经是您想要的,而var x需要更改。 -
如果您确定会有
window对象 - 我建议使用window.x。当您正在编写第 3 方脚本时 - 没有人可以保证它将在什么上下文中执行。应该是window.x = window.x || {}
标签: javascript object