2

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

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

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

4

2 回答 2

1

当你这样做时,fx = window.fx;你正在覆盖fx匿名函数的本地范围内的 which 。如果你想在全局范围之外访问它,你需要做 window.fx = fx;. 似乎你想在加载时调用函数pop,而不是在加载时注册,这就是你在这里尝试做的window.onload = fx.pop('hi');这将立即调用pop并将方法的结果设置为load事件的回调(这是未定义的,因为你的方法没有' t 返回任何东西;除非该方法返回另一个需要在加载后调用的函数,否则将变得无用)。相反,您可能想尝试这种方式。

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')
};
于 2013-10-10T00:43:52.247 回答
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');
于 2013-10-10T00:38:52.493 回答