为什么我需要在“中传递匿名函数?”;设置超时“;用JavaScript?

为什么我需要在“中传递匿名函数?”;设置超时“;用JavaScript?,javascript,jquery,settimeout,Javascript,Jquery,Settimeout,我试图用JQuery和JavaScript为按钮动画添加超时。首先,我尝试了以下代码: setTimeout(playBtnSoundAndAnimate(currentSequence[last]), 2000); 这没有添加任何超时。但是,当我在下面编写代码时,超时有效: setTimeout(function () { playBtnSoundAndAnimate(currentSequence[last]), 2000;}); 为什么我需要在匿名函数中传递“playBtnS

我试图用JQuery和JavaScript为按钮动画添加超时。首先,我尝试了以下代码:

setTimeout(playBtnSoundAndAnimate(currentSequence[last]), 2000);
这没有添加任何超时。但是,当我在下面编写代码时,超时有效:

setTimeout(function () {
    playBtnSoundAndAnimate(currentSequence[last]), 2000;}); 
为什么我需要在匿名函数中传递“playBtnSoundAnAnimate”才能使setTimeout生效

如果重要的话,“playBtnSoundAndAnimate”函数是这样的:

function playBtnSoundAndAnimate(activatedBtn) {
  $("#" + activatedBtn).addClass("pressed");
  setTimeout(function () {
    $(".btn").removeClass("pressed");
  }, 50);

  switch (activatedBtn) {
    case "green":
      const greenAudio = new Audio("sounds/green.mp3");
      greenAudio.play();
      break;
    case "red":
      const redAudio = new Audio("sounds/red.mp3");
      redAudio.play();
      break;
    case "yellow":
      const yellowAudio = new Audio("sounds/yellow.mp3");
      yellowAudio.play();
      break;
    case "blue":
      const blueAudio = new Audio("sounds/blue.mp3");
      blueAudio.play();
      break;

    default:
      break;
  }}

查看,函数
setTimeout
接受代码或回调函数作为第一个参数。其工作原理是,当计时器过期时,回调函数的这段代码被放入回调队列。

是!谢谢:)