我在 JavaScript/jQuery 插件开发中看到了一个熟悉的模式(Modernizr 使用了第一个示例),通过这种模式,函数很好地包装在 IIFE 中,并在window对象上全局定义。我想问的是,通过执行以下操作使您的插件/脚本在全球范围内可访问是否是个好主意:
window.myPluginName = (function (window, document, undefined) {
// Plugin logic
})(window, document);
Run Code Online (Sandbox Code Playgroud)
我问这个是因为一些脚本/插件需要在调用它们的 DOM 中访问,或者在文档/文件中的其他地方访问。在插件内部,我有时也会看到:
(function (window, document, undefined) {
window.myPluginName = function () {
// Plugin logic
}
})(window, document);
Run Code Online (Sandbox Code Playgroud)
甚至这个:
(function (window, document, undefined) {
var myPluginName = function () {
// Plugin logic
}
window.myPluginName = myPluginName;
})(window, document);
Run Code Online (Sandbox Code Playgroud)
我真的对设置背后的差异很感兴趣,如果有人比我有更多的经验,我会很友好地提供一些最适合开发的建议。谢谢!
简短的回答:使用对您来说最有意义的一个。
更长的答案:唯一的区别是分配发生的位置,但在功能方面它们都是等效的。他们中的任何一个都没有比另一个有任何优势或劣势。
注意:就目前情况而言,最后两个不起作用,因为window
函数内部未定义。但我假设您实际上会将window
对象作为参数传递给 IIFE。