我正在查看qunit的代码。
我的问题是你为什么要通过属性将qunit对象附加到window对象。
以下是file的链接。看第11行。
如果我使用firebug查看单元测试运行,您可以看到它是窗口的属性。
[编辑] 附加:在特定名称空间中声明事物的最佳实践是否有特定参考?
答案 0 :(得分:5)
所有全局对象(函数,变量等)都只是窗口的子对象,它是默认的上下文。
例如:window.jQuery
或window.$
以这种方式思考可能更容易......你还会把它们放在哪里?当你做一些通用的,最好的(或至少最简单的)将它们粘在默认位置时。如果你正在做一些复杂的事情,包括许多函数,对象等......最好将它们放在命名空间或对象中。例如,jQuery的所有代码都在jQuery
下,而不是像window.ajax
那样在DOM的根目录中,而是jQuery.ajax
。
这是更整洁,但是当你处理一些项目时可能有点过分,但是如果是这样的话,确保它们是唯一的是一个好主意...这就是qunit所做的,通过为它们的对象添加前缀{ {1}}
答案 1 :(得分:2)
将全局变量作为window
的属性附加是不好的做法。应使用var
声明所有全局变量。这是我的理由:
ReferenceError
,如果它们被使用的话。使用var
表示JavaScript的提升生效,并缓解了这个问题。[[DontDelete]]
,这意味着你可以删除你的全局变量。这太傻了。就我而言,window.x = 1
创建一个名为x
的全局变量的事实是一个有趣的JavaScript好奇心,但不应该使用也不应该回复。但是,有充分的理由使用window
的属性,因为它是一个像任何其他(或多或少)的对象。在这些情况下,您应该使用全名,例如window.onload
而非onload
。