回调函数的新功能(将回调作为参数传递)(Javascript)
这里是新手问题 我试图更好地理解回调函数。在这里读到关于他们的文章,我觉得我领会了这个想法回调函数的新功能(将回调作为参数传递)(Javascript),javascript,callback,Javascript,Callback,这里是新手问题 我试图更好地理解回调函数。在这里读到关于他们的文章,我觉得我领会了这个想法 函数问候语(名称、回调){ log(`Greetings${name}`); 回调(); }; 函数timeOfDay(time){ log(`你怎么这么好${time}?`); }; 问候语(“布拉德”,时间(“晚上”)您很接近,但是当传递timeOfDay(“晚间”)时,实际上并没有将该函数作为回调传递。这是一个函数调用,它会立即运行,无论返回值是什么,都会作为第二个参数传递给greeting函数调
函数问候语(名称、回调){
log(`Greetings${name}`);
回调();
};
函数timeOfDay(time){
log(`你怎么这么好${time}?`);
};
问候语(“布拉德”,时间(“晚上”)
您很接近,但是当传递timeOfDay(“晚间”)
时,实际上并没有将该函数作为回调传递。这是一个函数调用,它会立即运行,无论返回值是什么,都会作为第二个参数传递给greeting
函数调用。由于timeOfDay
不返回任何内容,因此您正在将undefined
传递给greeting
解决方案是将实际函数(而不是调用函数的结果(除非该结果实际上是另一个函数)传递到问候语
,一种方法是将timeOfDay()
函数调用包装在匿名函数声明中,如下所示:
函数问候语(名称、回调){
log(`Greetings${name}`);
回调();
};
函数timeOfDay(time){
log(`你怎么这么好${time}?`);
};
问候语('Brad',function(){timeOfDay('night')})
您很接近,但是当传递timeOfDay(“晚间”)
时,实际上并没有将该函数作为回调传递。这是一个函数调用,它会立即运行,无论返回值是什么,都会作为第二个参数传递给greeting
函数调用。由于timeOfDay
不返回任何内容,因此您正在将undefined
传递给greeting
解决方案是将实际函数(而不是调用函数的结果(除非该结果实际上是另一个函数)传递到问候语
,一种方法是将timeOfDay()
函数调用包装在匿名函数声明中,如下所示:
函数问候语(名称、回调){
log(`Greetings${name}`);
回调();
};
函数timeOfDay(time){
log(`你怎么这么好${time}?`);
};
问候语('Brad',function(){timeOfDay('night')})代码>如评论中所述,当您执行以下操作时:
问候语('Brad',时间('night')代码>
您将立即调用timeOfDay
函数
为避免出现这种情况,您可以使用以下选项之一:
将函数调用封装在匿名函数中,如另一个答案中所述
可以省略/删除括号,如下面的问候语('Brad',timeOfDay)代码>(这避免了即时函数调用,但您将丢失参数“晚间”
,并且错误将持续存在)
您可以.bind()
将上下文绑定到函数,在下面的示例中,我将此
绑定为函数的上下文,这样它就不会立即调用函数
看一看:
函数问候语(名称、回调){
log(`Greetings${name}`);
回调();
};
函数timeOfDay(time){
log(`你怎么这么好${time}?`);
};
问候('Brad',Day.bind的时间(今,'晚')代码>如评论中所述,当您执行以下操作时:
问候语('Brad',时间('night')代码>
您将立即调用timeOfDay
函数
为避免出现这种情况,您可以使用以下选项之一:
将函数调用封装在匿名函数中,如另一个答案中所述
可以省略/删除括号,如下面的问候语('Brad',timeOfDay)代码>(这避免了即时函数调用,但您将丢失参数“晚间”
,并且错误将持续存在)
您可以.bind()
将上下文绑定到函数,在下面的示例中,我将此
绑定为函数的上下文,这样它就不会立即调用函数
看一看:
函数问候语(名称、回调){
log(`Greetings${name}`);
回调();
};
函数timeOfDay(time){
log(`你怎么这么好${time}?`);
};
问候('Brad',Day.bind的时间(今,'晚')
timeOfDay()
调用该函数。如果要传递函数本身,需要省略()
timeOfDay('night')
返回未定义的,因为没有返回语句。。。而未定义的不是一个函数-您需要问候语('Brad',function(){timeOfDay('night');})@deceze,但是你是如何通过“晚上”
?或者你可以像这样使用(“Brad”,time of day.bind(this,“nighter”))代码>这样就可以将上下文绑定到函数而不调用它instantaneous@CalvinNunes回答这个问题,我会投票。timeOfDay()
调用该函数。如果要传递函数本身,需要省略()
timeOfDay('night')
返回未定义的,因为没有返回语句。。。而未定义的不是一个函数-您需要问候语('Brad',function(){timeOfDay('night');})@deceze,但是你是如何通过“晚上”
?或者你可以像这样使用(“Brad”,time of day.bind(this,“nighter”))代码>这样就可以将上下文绑定到函数而不调用它instantaneous@CalvinNunes回答这个问题,我会投赞成票。你说“你可以省略括号”是什么意思?我觉得你让他走上了错误的道路,就像问题的第一条评论所说的那样。就像问候语('Brad',timeOfDay)代码>但这样参数w