回调函数的新功能(将回调作为参数传递)(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