为什么我的jquery回调会提前解雇?

时间:2013-07-13 15:37:06

标签: jquery animation callback

即使使用.promise().done(),我的回调函数也会提前触发..

为什么吗

Fiddle

title.delay(1000).show(1200).promise().done( function(){
  menu.show(0, function(){
    menu.find('*').show(600, message())
  })      
})  

message = function(){ alert('done'); }

1 个答案:

答案 0 :(得分:6)

此代码:

menu.find('*').show(600, message())

需要:

menu.find('*').show(600, message)

不同之处在于:在第一个示例中,您有效地传递了两个参数:

  1. 600
  2. 函数message(此处为undefined
  3. 返回的结果

    因为() - 是JavaScript中调用函数的运算符。

    但是,在第二个示例中,您传递了600功能 message

    正如@FakeRainBrig并注意到 - 如果你想为函数提供参数 - 你有几种方法:

    1. 使用message = message.bind(<context>, param1, param2,...)。然后,只要您拨打message,就会以<context>作为thisparam*作为参数调用。
    2. 使用包装功能:
    3. .show(600, function() {
         message(param1, param2, ...);
      });