是否可以传递一个尚不存在的回调函数?我的目标是有一个共同的函数,它将等待另一个回调函数存在,当它存在时,它应该执行它。这是我到目前为止所做的,但是我无法弄清楚如何传递这个功能,因为它还没有作为一个函数存在。
function RunTemplateFunction(callback, userInfo) {
if ($.isFunction(callback)) {
callback(userInfo);
} else {
var myInterval = setInterval(function () {
if ($.isFunction(callback)) {
clearInterval(myInterval);
callback(userInfo);
}
}, 200);
}
}
我运行这样的功能:
RunTemplateFunction(MyFunctionToRun, GetUserInfo());
由于显而易见的原因,我得到MyFunctionToRun未定义,我还尝试了将函数作为字符串传递,然后使用eval()将字符串转换为函数的解决方法。但是这会引发同样的错误。我还想过使用new function(),但实际上创建了一个新函数。
感谢任何帮助。谢谢。
答案 0 :(得分:1)
如果您通过RunTemplateFunction
致电undefined
我们无法看到,是否定义了回调,因为我们没有提及任何内容。
如果您可以修改声明以接受object
,如下所示,我们可以实现我们想要的目标
function RunTemplateFunction(options, userInfo) {
if ($.isFunction(options.callback)) {
console.log('called1',userInfo);
options.callback(userInfo);
} else {
var myInterval = setInterval(function () {
if ($.isFunction(options.callback)) {
console.log('Called dynamically!!');
clearInterval(myInterval);
options.callback(userInfo);
}
}, 200);
}
}
var options = {}
RunTemplateFunction(options,{user:122});
options.callback = function(){
console.log("I'm called!!");
}
这将打印
Called dynamically!!
I'm called!!
修改强>
我们也可以在没有callback
的情况下以下列方式调用setInterval
函数,它看起来会有所不同,但options.callback
变量会被template.callMe
函数替换,并且它也会瞬间变换。
function TemplateRunner(userInfo){
this.callMe = function(cb){
this.templateFunction(cb);
}
this.templateFunction = function(callback){
callback(userInfo);
}
}
var template = new TemplateRunner({user:100})
template.callMe(function(user){
console.log('call me1',user);
});
template.callMe(function(user){
console.log('call me2',user);
})
这将打印
call me1 {user: 100}
call me2 {user: 100}