0

这就是我包装所有 JavaScript 的方式:

;(function($, window, undefined) {
    var document = window.document;
    var myFunction = function() {}
})(jQuery, window);

但现在我需要从该闭包之外调用 myFunction 。

window.addEventListener("offline", function(e) {
    myFunction();
}, false);

问:如何命名自执行匿名函数,以便可以从全局范围调用 myFunction?

4

3 回答 3

2

很简单,只需将您的函数附加到全局对象(窗口):

;(function($, window, undefined) {
    var document = window.document;
    var myFunction = function() {}
    window.myNamedFunction = myFunction;
})(jQuery, window);
于 2013-03-27T17:34:35.813 回答
2

将函数分配给您要使用的任何对象/范围的属性。

;(function($, window, undefined) {
    var document = window.document;
    var myFunction = function() {};
    window.myFunction = myFunction;
})(jQuery, window);

不过,您最好希望从 IIFE 中返回包含所有“出口”的东西。

var exports = (function($, window, undefined) {
    var document = window.document;
    var myFunction = function() {};
    return {
        "myFunction": myFunction
    };
})(jQuery, window);

window.addEventListener("offline", function(e) {
    exports.myFunction();
}, false);

AMD对这种编程风格很有帮助。

于 2013-03-27T17:35:05.957 回答
1

使用命名空间并将其推送到全局范围。

window.yourNamespace = window.yourNamespace || {};
window.yourNamespace.myFunction = function() {};
于 2013-03-27T17:33:25.010 回答