gpt4 book ai didi

javascript - 传递一个函数作为 Javascript 中可能尚不存在的参数

转载 作者:行者123 更新时间:2023-12-03 07:26:36 26 4
gpt4 key购买 nike

是否可以传递一个尚不存在的回调函数?我的目标是有一个通用函数,它将等待另一个回调函数存在,当它确实存在时,它应该执行它。这是我到目前为止所拥有的,但我不知道如何传递尚不存在的函数。

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 is undefined ,我还尝试了将函数作为字符串传递,然后使用 eval() 将字符串转换为函数的解决方法。但这会引发同样的错误。我还想过使用 new function() ,但这实际上创建了一个新函数。

感谢任何帮助。谢谢。

最佳答案

如果您通过 undefined 调用 RunTemplateFunction,我们无法看到回调是否已定义,因为我们没有引用任何内容。

如果你可以修改声明来接受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}

关于javascript - 传递一个函数作为 Javascript 中可能尚不存在的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35978929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com