[英]How do js plug-ins make functions in IIFE accessible?
例如,jQuery的代碼以(function(){
開頭,因此不應從外部文件訪問它的功能,但是如何使它們可訪問呢?我嘗試創建1.js,2.js
,這是代碼1。 JS
(function(){
'use strict';
function aa(){
alert();
console.log('a');
return 1;
}
})();
和2.js
function b(){
aa();
}
現在,當我運行b()
時,即使我將它們都添加到HTML文件中,它也會返回找不到aa()
的錯誤。
首先,您似乎對jQuery的編寫方式與用法之間感到困惑。 $(function () { })
是使用 jQuery的一種方式(它不是IIFE,BTW)。
其次,jQuery是可訪問的,因為它將$
和jQuery
(均指同一個東西)分配給window
。 它的所有方法都是該$
對象的屬性。
您可以做同樣的事情:
(function() { 'use strict'; function aa() { alert(); console.log('a'); return 1; } function ab() { return 2; } window.myStuff = { aa: aa, ab: ab }; })(); (function() { function b() { var sum = myStuff.aa() + myStuff.ab(); console.log(sum); } b(); })();
IIFE與其他功能一樣。 這意味着您可以像在任何其他函數中一樣將參數傳遞到IIFE中,例如:
(function(num) { console.log(num * 2); })(3); // logs 6
但是,您不僅可以像上面那樣傳遞數字,還可以傳遞對象:
(function(obj) {
console.log(obj.foo + 1); // logs 124
})({ foo: 123 });
由於可以傳遞對象,因此還可以傳遞指向對象的變量:
var outsideObj = { foo: 123 };
(function(insideObj) {
insideObj.foo = insideObj.foo + 1;
})(outsideObj);
console.log(outsideObj.foo); // logs 124
請記住,在JavaScript中, window
變量是一個全局變量,並且是一個對象。 瞧瞧:
(function(insideObj) {
insideObj.example = function() {
console.log('example called');
};
})(window);
window.example(); // logs 'example called'
因此,要點是您傳入一個對象,然后在IIFE中修改該對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.