如果我们将一个函数作为参数传递给另一个函数,Java脚本引擎如何处理回调以及引擎如何知道它是一个回调。
答案 0 :(得分:1)
过度简化,功能是我们可以传递的东西,就像其他任何东西一样。我们可以传递数字,函数,字符串等参数。
看看这个:
// We'll just call the function passed in our function
// This is essentially a callback that does no work before
// calling the callback.
function call_function(f) {
return f();
}
var func = function(s) {console.log('func was called');}
var notAFunc = 42;
call_function(func); // func was called
call_function(notAFunc); // TypeError: number is not a function
TypeError
与尝试将42作为一项功能相同(因为我们正在做的所有事情):
42() // TypeError: number is not a function
基础知识是JavaScript没有做任何特别的事情来知道你传递的回调是否是一个函数。在某些时候,它会尝试调用该函数,这可能会或可能不会导致错误。
Xufox在评论中指出可以检查参数的类型,如下所示:
function call_function(f) {
if (typeof f === 'function') {
return f();
}
}
记住这一点很好,但这与引擎无关,它可以由程序员进行这种理智检查。< / p>