我正在为我的网页编写一些有用的功能。这些函数将在匿名函数内部,并将从函数外部调用。当我尝试调用函数时,我收到错误。这就是我构建它的方式:
(function(){
var fx ={
pop : function(msg){
alert(msg);
}
};
fx = window.fx;
})();
window.onload = fx.pop('hi');
有谁知道我怎么做这个?我知道这是可能的,因为jQuery和其他javascript库都是这样编写的。
答案 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');