簡體   English   中英

js插件如何使IIFE中的功能可訪問?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM