同步代码就是代码1没执行完不能执行代码2
异步代码就是代码1没执行完也可以直接到代码2,以此类推。
在本章老师的var boy=boywalk( )下的代码就是异步码
咋一看好像是同步,实际上then里的代码没执行完就已经执行下一个代码了
可以这样尝试是否真的如此。如then(这里设置一个动画是增加id="boy"的宽度).then(这里改变id="boy"的背景颜色)。此时执行时你会发现宽度动画没有执行完毕,背景颜色已经被设置。
而老师为什么要加return walkto()呢?为了返回新的对象实现和同步代码一样的效果,就是等待对象的出现在执行下面的代码,此时仍然是异步代码,是异步中等待,等待什么呢就是新对象的出现。比如本章第一return后与第二个return之间的代码就是等待第一个return 返回的对象才能执行,同理第二个return后面的代码也是等待第二个return返回新的对象再执行。所以出现了同步代码效果(实质是异步等待)。
那么移除return后当然也是异步代码啦,为什么移除后直接就编程蓝色呢?因为这些代码执行就是一瞬间的事情,所以异步和同步效果是一样的。
如果移除return默认的第一个对象就是第一个walkto()因为then()函数里面没有返回值的话,执行就执行了,如果有返回的值的话,如果是对象就会从新选择对象执行下面的代码。
这是我的理解了。至于如何实现异步代码,那我还不太懂,那就得从jq的dfd对象说起了吧。有待学习研究中...
看了文章很有帮助,谢谢楼主分享~
对了我吧我在网上找到的问题的讲解链接放这里http://www.jb51.net/article/28054.htm,大家可以看看帮助理解,很好理解的,我看了这里的讲解发现我上面的理解基本是正确的,为什么要返回deferred对象的.resolve状态就是要告诉.then()里的代码执行的状态,是否完成(deferred.resolve),未完成即一直保持执行状态(deferrde.promise),失败(deferred.reject),这是jquery规定的任意deferred对象都有的三中执行状态。
希望理解正确,大神们觉得对的给个赞吧,就更加有动力学习了