作为参数传递的函数总是回调吗?JavaScript

Zac*_*ith 5 javascript callback anonymous-function

如果我有下面的代码,我将两个函数作为参数传递给 function sayHi,这是回调的示例吗?

我注意到有两种运行这些“参数函数”的方法:要么如下所示,我们在定义它们的地方调用函数(作为参数),要么在 sayHi 函数中调用参数。这是回调函数和匿名函数之间的区别吗?

function sayHi(name, testForTrue) {
    if (testForTrue == true) {
        console.log(name);
    }
}

sayHi(function() {
    return 'Zach'
}(), function() {
    return true;
}());
Run Code Online (Sandbox Code Playgroud)

我可以获得相同结果的另一种方法如下。在这种情况下,我在不同的时间评估函数?两者之间有什么实际区别吗?

function sayHi(name, testForTrue) {
    if (testForTrue() == true) {
        console.log(name());
    }
}

sayHi(function() {
    return 'Zach'
}, function() {
    return true;
});
Run Code Online (Sandbox Code Playgroud)

Aln*_*tak 4

是的,作为参数传递的函数始终是回调,即使意图是同步调用该函数(cf Array.prototype.map)而不是异步调用该函数(cfwindow.setTimeout )。

在您的第一个代码块中,您当然没有实际传递函数。您有两个立即调用的函数表达式,其中此上下文中的关键部分被立即调用。函数表达式在它们出现在代码中时被调用,并且只有这些表达式的结果被传递到sayHi.