问答详情
源自:4-2 小男孩部分代码的封装

对于同步代码和异步代码问题的理解

同步代码就是代码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对象说起了吧。有待学习研究中...

提问者:我想做前端大牛 2016-05-23 20:53

个回答

  • 冰冰冰冰冰3515066
    2016-10-24 19:03:13

    看了文章很有帮助,谢谢楼主分享~ 

  • 我想做前端大牛
    2016-05-24 14:19:52

    对了我吧我在网上找到的问题的讲解链接放这里http://www.jb51.net/article/28054.htm,大家可以看看帮助理解,很好理解的,我看了这里的讲解发现我上面的理解基本是正确的,为什么要返回deferred对象的.resolve状态就是要告诉.then()里的代码执行的状态,是否完成(deferred.resolve),未完成即一直保持执行状态(deferrde.promise),失败(deferred.reject),这是jquery规定的任意deferred对象都有的三中执行状态。

  • 我想做前端大牛
    2016-05-23 20:56:11

    希望理解正确,大神们觉得对的给个赞吧,就更加有动力学习了