作为参数传递的函数是否总是回调? JavaScript
Are functions passed as parameters always callbacks? JavaScript
如果我有下面的代码,其中我将两个函数作为参数传递给函数 sayHi
,这是回调的示例吗?
我注意到 运行 这些 'parameter functions' 有两种方式:如下所示,我们在定义它们的地方调用函数(作为参数),或者在我调用参数的地方sayHi 函数。这就是回调函数和匿名函数的区别吗?
function sayHi(name, testForTrue) {
if (testForTrue == true) {
console.log(name);
}
}
sayHi(function() {
return 'Zach'
}(), function() {
return true;
}());
我可以获得相同结果的另一种方法如下所示。在这种情况下,我是在不同的时间评估功能吗?两者之间有什么实际区别吗?
function sayHi(name, testForTrue) {
if (testForTrue() == true) {
console.log(name());
}
}
sayHi(function() {
return 'Zach'
}, function() {
return true;
});
在您的第一个示例中,您传递的不是函数,而是值;也就是说
(function(){ return 3; })()
就是整数3。
是立即调用函数得到的值,与此无关
当您传递回调时,接收者将调用它(或将其传递给其他函数)并且代码将稍后执行,而不是在调用点。
我想这取决于您的 回调 函数实际在做什么。
在您的示例中,您实际上所做的只是返回一个值。这不是真正的 "function",它每次都返回一个固定值。
如果你的函数实际上是在做一个过程,或者返回一个不同的结果,那么我个人认为它是一个回调。 (它的名字是不言自明的,真的)。您的脚本不应依赖它,而应将其作为函数结果的处理程序。
例如,像这样的东西就是我认为的回调函数:
function doSomething(callback) {
var userInput = prompt("hello, enter a number 1-10"),
hasWon = false;
if (userInput === "3") hasWon = true;
callback(hasWon);
};
有了这个提供,我们可以这样称呼它:
doSomething(function(hasWon){
if (hasWon) alert("Congratz! You guessed my lucky number!")
});
是的,作为参数传递的函数始终是回调,即使意图是函数被调用 同步 (c.f. Array.prototype.map
) 而不是比 异步 (c.f. window.setTimeout
).
在您的第一个代码块中,您当然没有真正传递函数。您有两个 immediately invoked 函数表达式,其中此上下文中的关键部分是 immediately invoked。函数表达式在它们出现在代码中的位置被调用,并且只有这些表达式的 结果 被传递给 sayHi
.
如果我有下面的代码,其中我将两个函数作为参数传递给函数 sayHi
,这是回调的示例吗?
我注意到 运行 这些 'parameter functions' 有两种方式:如下所示,我们在定义它们的地方调用函数(作为参数),或者在我调用参数的地方sayHi 函数。这就是回调函数和匿名函数的区别吗?
function sayHi(name, testForTrue) {
if (testForTrue == true) {
console.log(name);
}
}
sayHi(function() {
return 'Zach'
}(), function() {
return true;
}());
我可以获得相同结果的另一种方法如下所示。在这种情况下,我是在不同的时间评估功能吗?两者之间有什么实际区别吗?
function sayHi(name, testForTrue) {
if (testForTrue() == true) {
console.log(name());
}
}
sayHi(function() {
return 'Zach'
}, function() {
return true;
});
在您的第一个示例中,您传递的不是函数,而是值;也就是说
(function(){ return 3; })()
就是整数3。
是立即调用函数得到的值,与此无关
当您传递回调时,接收者将调用它(或将其传递给其他函数)并且代码将稍后执行,而不是在调用点。
我想这取决于您的 回调 函数实际在做什么。
在您的示例中,您实际上所做的只是返回一个值。这不是真正的 "function",它每次都返回一个固定值。
如果你的函数实际上是在做一个过程,或者返回一个不同的结果,那么我个人认为它是一个回调。 (它的名字是不言自明的,真的)。您的脚本不应依赖它,而应将其作为函数结果的处理程序。
例如,像这样的东西就是我认为的回调函数:
function doSomething(callback) {
var userInput = prompt("hello, enter a number 1-10"),
hasWon = false;
if (userInput === "3") hasWon = true;
callback(hasWon);
};
有了这个提供,我们可以这样称呼它:
doSomething(function(hasWon){
if (hasWon) alert("Congratz! You guessed my lucky number!")
});
是的,作为参数传递的函数始终是回调,即使意图是函数被调用 同步 (c.f. Array.prototype.map
) 而不是比 异步 (c.f. window.setTimeout
).
在您的第一个代码块中,您当然没有真正传递函数。您有两个 immediately invoked 函数表达式,其中此上下文中的关键部分是 immediately invoked。函数表达式在它们出现在代码中的位置被调用,并且只有这些表达式的 结果 被传递给 sayHi
.