回调中的setTimout()不起作用,为什么?

Ton*_*bet 0 javascript jquery settimeout

我想知道为什么setimout(fun(),time)在这里不起作用:

上下文:这显示一条消息并隐藏它,我想让它等待2秒,但如果我这样做它不会隐藏(通常我没有setimeout()

function mostrar_msj(msj){
  $('#notificaciones').text(msj);
  $('#notificaciones').animate({
          top:$(window).scrollTop()+"px"
      },
      {
          queue: false,
          duration: 350
  });  
  $("#notificaciones").slideDown(1000, setTimeout('cerrar()',2000));
}

function cerrar(){
  $("#notificaciones").fadeOut(2000);
}
Run Code Online (Sandbox Code Playgroud)

我只是困惑,在这里:?

Fel*_*ing 8

当您使用jQuery时,更容易使用delay():

$("#notificaciones").slideDown(1000).delay(2000).fadeOut(2000);
Run Code Online (Sandbox Code Playgroud)

动画功能会自动排队.


但要回答你的实际问题:

  1. 您没有正确设置回调.这个

    $("#notificaciones").slideDown(1000, setTimeout('cerrar()',2000));
    
    Run Code Online (Sandbox Code Playgroud)

    将设置返回值setTimeout回调的slideDown.一个适当的回调将是

    $("#notificaciones").slideDown(1000, function() {
        setTimeout('cerrar()',2000);
    });
    
    Run Code Online (Sandbox Code Playgroud)

    但这并没有解释为什么cerrar没有被称为明显setTimout 称为.这将我们带到第二点:

  2. 如果将字符串传递给setTimeout,则在全局范围内进行评估.如果你在ready处理程序中有这段代码,那么cerrar不在全局范围内,因此JavaScript找不到.

    因此,不鼓励传递字符串.你应该传递一个函数引用:

    setTimeout(cerrar, 2000);
    
    Run Code Online (Sandbox Code Playgroud)