这里讨论一下$.Deferred()对象的应用中.then(function(){})函数的一个一个问题。
.then(function(){
return fn();
})
为什么要有return?
var boy = BoyWalk();
// 开始
$("button:first").click(function(){
boy.walkTo(2000, 0.2).then(function(){
// 第一次走路完成
boy.setColor("red");
}).then(function(){
// 第二次开始走
return boy.walkTo(2000, 0.4);
//没有return就会调用上一个Deferred对象,状态为已完成,所以以下函数执行同步,then函数没有异步作用,第二次走路的同时颜色变为黄色。有return则在boy.walkTo(2000, 0.4)函数内部会重新创建Deferred对象,直到动画完成,新Deferred对象的状态才会变为已完成。
}).then(function(){
// 第二次走完
boy.setColor("yellow");
}).then(function(){
// 第三次开始走
boy.walkTo(2000, 0.6);
}).then(function(){
// 第三次走完
boy.setColor("blue");
});
});
我们不用管这代码的作用,只看注释就可以了。