gpt4 book ai didi

javascript - 避免 IIFE 模式的多个副本

转载 作者:行者123 更新时间:2023-11-27 23:53:40 26 4
gpt4 key购买 nike

我看到了以下 IIFE 模式(它有名字吗?),根据 this博客文章可以防止其他插件的攻击,提高压缩率并具有微小性能优势。我还亲自给 IIFE 添加了一个命名空间:

(function (MyNamespace, $, window, document, undefined) {
"use strict";

// My Code

})(window.MyNamespace = window.MyNamespace || {}, window.jQuery, window, document);

我在每个 JavaScript 文件中都看到过这种模式。连接和缩小之后怎么样?如何确保我的代码仅使用上述 IIFE 中的一个进行包装?像 NPM、Gulp/Grunt 这样的工具在这方面有帮助吗?有处理这种情况的标准方法吗?

最佳答案

经过一番调查,像 jQuery 和 knockout 这样的库编写者通过在 JavaScript 中预置和附加 IFFE 来处理这个问题。然后他们有一个将所有内容连接在一起的 make 文件。

jQuery IIFE 的启动对于处理非浏览器场景要复杂得多。

<强> jQuery intro.js

(function( global, factory ) {
if ( typeof module === "object" && typeof module.exports === "object" ) {
module.exports = global.document ?
factory( global, true ) :
function( w ) {
if ( !w.document ) {
throw new Error( "jQuery requires a window with a document" );
}
return factory( w );
};
} else {
factory( global );
}
}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {

<强> jQuery outro.js

return jQuery;
}));

Knockout(感谢@JamesThorpe)采用稍微不同的方法来解析窗口及其后代。

<强> Knockout extern-pre.js

(function(undefined){
var window = this || (0, eval)('this'),
document = window['document'],
navigator = window['navigator'],
jQueryInstance = window["jQuery"],
JSON = window["JSON"];

<强> Knockout extern-post.js

}());

然后您可以使用类似 gulp-concat 的内容将开头和结尾文件夹在您自己的脚本文件中。

关于javascript - 避免 IIFE 模式的多个副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32460374/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com