如何运行作为参数传递的匿名函数

3

我知道在JavaScript中可以将函数作为参数传递。同时,也可以运行作为参数给定的函数。以下是一个示例:

function myfunction(param1, callbackfunction)
{
    //do processing here
    callbackfunction();
}

如果我想提供一个匿名函数,它将如何在外部函数内运行?
例如,使用以下函数:
setTimeout(function(){
})

这个匿名函数是如何在没有名称的情况下直接运行的?

1
因为在settimeout代码中,它接收一个对该函数的引用作为变量,然后决定运行它,就像您使用回调函数一样。唯一的区别是您无法看到内部的settimeout代码以确定它正在做什么。你在这里比较苹果和梨...你的settimeout代码示例相当于你编写myfunction("something", function () { });来调用你的函数。你的第一个代码片段相当于settimeout函数的内部。 - ADyson
2个回答

8

调用函数时不需要名称。名称只有在调试工具(例如查看堆栈跟踪)中时才有用。

要调用函数,您需要一个解析为函数的表达式,然后可以跟随 ()

您将函数作为第一个参数传递给 setTimeout,因此它被存储在该函数的第一个参数中。 setTimeout 的内部随即调用了它。

您在自己的代码中也是这样做的,只不过是作为第二个参数。

myfunction("some param", function () { /* ... */ }) ;

2
也许这样可以更清晰明了?最初的回答。

function callFunction(param1, callbackfunction) {
  console.log('callFunction', param1)
  //do processing here
  callbackfunction(param1);
}

function myCustomCallback(param) {
  console.log('myCustomCallback', param)
}

setTimeout(callFunction.bind(this, 'one', myCustomCallback ), 1000)

setTimeout(callFunction.bind(this, 'two', function(p) {alert(p)} ), 2000)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接