2

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

为什么?

小提琴

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

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

1 回答 1

6

这段代码:

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

需要是:

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

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

  1. 600
  2. 函数返回的结果messageundefined在此处)

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

但是,在第二个示例中,您传递600函数 message

正如@FakeRainBrigand 指出的那样——如果你想为函数提供参数——你有几种方法:

  1. 使用message = message.bind(<context>, param1, param2,...). 然后任何时候你调用message它都会被调用<context>asthisparam*as 参数。
  2. 使用包装功能:

.show(600, function() {
   message(param1, param2, ...);
});
于 2013-07-13T15:48:37.810 回答