2013-03-27 84 views
0

這是我總結我的所有的JavaScript:使用名稱,而不是一個匿名函數

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

但現在我有必要從封閉的外部調用myFunction的。

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

問:如何命名自動執行的匿名函數,以便我可以從全局範圍調用myFunction?

+0

「命名自執行匿名函數」,不會使它不是匿名嗎? – 2013-03-27 17:33:19

+0

是的,會的。我不知道我在說什麼。 – 2013-03-27 17:34:00

+0

你知道嗎,如果你在js中聲明一個變量時不放var,這會把它放到全局對象中嗎?這將使它可以從任何地方 – 2013-03-27 17:35:02

回答

2

分配的功能,以取其對象/範圍要使用的屬性。

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

你最好想從你的IIFE返回封裝所有'exports'的東西。

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對這種編程風格很有幫助。

+0

謝謝保羅。我看到你來自謝菲爾德。我曾經一直聽Boagworld。 – 2013-03-27 18:23:00

1

使用命名空間並將其推送到全局範圍。

window.yourNamespace = window.yourNamespace || {}; 
window.yourNamespace.myFunction = function() {}; 
2

很簡單,只需附上你的函數全局對象(窗口):

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