我在我的 JS 应用程序中使用异步函数,并使用我自己的函数来接收回调输入。当我调用回调函数时,我需要使用“return”关键字吗?有关系吗?有什么区别?
例如:
var getData = function(callback){
// do some aysnc db stuff...
return callback(results);
// or just
callback(results);
}
PS:我正在使用 javascript 编写混合移动应用程序。
最佳答案
如果您的函数只有一条路径,那么您几乎可以互换使用这两种形式。当然,如果没有 return,函数的返回值将是未定义的,但您的调用代码可能并没有使用它。
这是真的
return callback()
实际上等同于
callback(result); return;
后者确实会在调用堆栈上产生额外的帧,因此会占用更多资源。我想如果你有很多嵌套的回调,或者正在做递归,你会更快地用完堆栈空间。
这可能是个坏主意,我不认为我在说回调前的返回更符合惯用方式。
当你的函数中有多个路径时,你必须要小心。例如,这将按您的预期工作:
(cb)=> {
if (something) cb('a')
else cb('b')
}
但是,在这种情况下,两个回调都会被调用。
(cb)=> {
if (something) cb('a');
cb('b')
}
当您阅读上面的内容时,很明显两者都会被调用。然而,编写这样的代码是一个典型的节点新手错误(尤其是在处理错误时)。如果您想要或被执行,您需要:
(cb)=> {
if (something) return cb('a');
cb('b')
}
关于javascript - 我应该在 Javascript 的回调函数中使用 '' return"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34706848/