我不是来自JavaScript世界,但在闲暇时间,我正在玩它。我使用require.js。 我经常看到应用程序将实例存储到窗口对象以从其他任何地方访问。根据我的经验,使用全局实例是一个糟糕的设计。我错了吗?对于我的申请,到目前为止我还不需要。也许我欠那个require.js,但我不明白使用全局对象。任何人都可以解释一下吗?
答案 0 :(得分:1)
不加选择地填充(或"污染")带有标识符的全球空间确实非常有问题。原因很简单:库A决定在全局空间中将其入口点声明为main
,库B执行相同的操作并且您有冲突。甚至可能需要多次加载单个库。一个众所周知的例子是加载两个版本的jQuery,因为一个第三方库需要版本X而第二个第三方库需要Y. jQuery有noConflict
调用来帮助管理它。
但是,在审核中完成后,在全局空间中定义某些工具非常有用。在默认模式下使用RequireJS时,请将requirejs
,require
和define
导出到全局空间。 RequireJS小心不要将其所有内部空间泄漏到全球空间,这很棒。在什么情况下可接受的内容因所涉及的开发人员和所涉及的具体应用而异。对于我使用RequireJS开发的应用程序,我发现RequireJS只将三个符号导出到全局空间是可以接受的。如果我改变主意,可以采取一种方法阻止RequireJS直接导出到全局空间(例如,使用r.js
设置时,使用namespace
可以优化almond
。 {1}}库是另一种可能性。)