如何从外部访问匿名函数内的函数

时间:2013-10-10 00:35:46

标签: javascript anonymous-function

我正在为我的网页编写一些有用的功能。这些函数将在匿名函数内部,并将从函数外部调用。当我尝试调用函数时,我收到错误。这就是我构建它的方式:

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

有谁知道我怎么做这个?我知道这是可能的,因为jQuery和其他javascript库都是这样编写的。

2 个答案:

答案 0 :(得分:1)

执行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')
};

答案 1 :(得分:0)

确定 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');