簡體   English   中英

如何從外部訪問匿名函數內部的函數

[英]How do you access a function inside an anonymous function from outside

我正在為網頁編寫一些有用的功能。 這些函數將在匿名函數內部,並且將從函數外部調用。 當我嘗試調用函數時,出現錯誤。 這就是我構造的方式:

(function(){
    var fx ={
        pop : function(msg){
            alert(msg);
        }
    };
    fx = window.fx;
})();
window.onload = fx.pop('hi');

有人知道我該怎么做嗎? 我知道這是可能的,因為jQuery和其他javascript庫是這樣寫的。

當你做fx = window.fx; 您將覆蓋匿名函數本地范圍內的fx 如果要在全局范圍之外訪問它,則需要執行window.fx = fx; 而且好像您要在加載時調用pop函數,而不是在加載時調用函數,這就是您要在此處執行的操作window.onload = fx.pop('hi'); 這將立即調用pop並將方法的結果設置為load事件的回調(未定義,因為您的方法不返回任何內容;除非該方法返回另一個需要在加載后調用的函數,否則此函數將變得無用)。 相反,您可能想嘗試這種方式。

window.onload = fx.pop.bind(this, 'hi'); //Now this will get invoked only after load event is completed, it bind the current context to the function pop with the argument  `hi`

要么

window.onload = function(){
    fx.pop('hi'); //Now this gets invoked only after load event is completed
};

因此,您可以嘗試:

(function(){
    var fx ={
        pop : function(msg){
            alert(msg);
        }
    };
    window.fx = fx;
})();
window.onload = function(){
    fx.pop('hi')
};

確定 jquery和其他javascript庫是這樣寫的嗎? 我不知道一種從函數外部訪問函數范圍的簡單方法。 這似乎是一個不尋常的目標,所以請解釋一下您嘗試使用此技術解決的問題,也許有更合適的策略。

例如,您可以嘗試:

var fx;
(function(){
    fx ={
        pop : function(msg){
            alert(msg);
        }
    };
    fx = window.fx; // this will probably overwrite your previous object with undefined
})();
window.onload = fx.pop('hi');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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