對(duì)于同步代碼和異步代碼問題的理解
同步代碼就是代碼1沒執(zhí)行完不能執(zhí)行代碼2
異步代碼就是代碼1沒執(zhí)行完也可以直接到代碼2,以此類推。
在本章老師的var boy=boywalk( )下的代碼就是異步碼
咋一看好像是同步,實(shí)際上then里的代碼沒執(zhí)行完就已經(jīng)執(zhí)行下一個(gè)代碼了
可以這樣嘗試是否真的如此。如then(這里設(shè)置一個(gè)動(dòng)畫是增加id="boy"的寬度).then(這里改變id="boy"的背景顏色)。此時(shí)執(zhí)行時(shí)你會(huì)發(fā)現(xiàn)寬度動(dòng)畫沒有執(zhí)行完畢,背景顏色已經(jīng)被設(shè)置。
而老師為什么要加return walkto()呢?為了返回新的對(duì)象實(shí)現(xiàn)和同步代碼一樣的效果,就是等待對(duì)象的出現(xiàn)在執(zhí)行下面的代碼,此時(shí)仍然是異步代碼,是異步中等待,等待什么呢就是新對(duì)象的出現(xiàn)。比如本章第一return后與第二個(gè)return之間的代碼就是等待第一個(gè)return 返回的對(duì)象才能執(zhí)行,同理第二個(gè)return后面的代碼也是等待第二個(gè)return返回新的對(duì)象再執(zhí)行。所以出現(xiàn)了同步代碼效果(實(shí)質(zhì)是異步等待)。
那么移除return后當(dāng)然也是異步代碼啦,為什么移除后直接就編程藍(lán)色呢?因?yàn)檫@些代碼執(zhí)行就是一瞬間的事情,所以異步和同步效果是一樣的。
如果移除return默認(rèn)的第一個(gè)對(duì)象就是第一個(gè)walkto()因?yàn)閠hen()函數(shù)里面沒有返回值的話,執(zhí)行就執(zhí)行了,如果有返回的值的話,如果是對(duì)象就會(huì)從新選擇對(duì)象執(zhí)行下面的代碼。
這是我的理解了。至于如何實(shí)現(xiàn)異步代碼,那我還不太懂,那就得從jq的dfd對(duì)象說起了吧。有待學(xué)習(xí)研究中...
2016-10-24
看了文章很有幫助,謝謝樓主分享~?
2016-05-24
對(duì)了我吧我在網(wǎng)上找到的問題的講解鏈接放這里http://www.jb51.net/article/28054.htm,大家可以看看幫助理解,很好理解的,我看了這里的講解發(fā)現(xiàn)我上面的理解基本是正確的,為什么要返回deferred對(duì)象的.resolve狀態(tài)就是要告訴.then()里的代碼執(zhí)行的狀態(tài),是否完成(deferred.resolve),未完成即一直保持執(zhí)行狀態(tài)(deferrde.promise),失?。╠eferred.reject),這是jquery規(guī)定的任意deferred對(duì)象都有的三中執(zhí)行狀態(tài)。
2016-05-23
希望理解正確,大神們覺得對(duì)的給個(gè)贊吧,就更加有動(dòng)力學(xué)習(xí)了