對于同步代碼和異步代碼問題的理解
同步代碼就是代碼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-10-24
看了文章很有幫助,謝謝樓主分享~?
2016-05-24
對了我吧我在網上找到的問題的講解鏈接放這里http://www.jb51.net/article/28054.htm,大家可以看看幫助理解,很好理解的,我看了這里的講解發現我上面的理解基本是正確的,為什么要返回deferred對象的.resolve狀態就是要告訴.then()里的代碼執行的狀態,是否完成(deferred.resolve),未完成即一直保持執行狀態(deferrde.promise),失?。╠eferred.reject),這是jquery規定的任意deferred對象都有的三中執行狀態。
2016-05-23
希望理解正確,大神們覺得對的給個贊吧,就更加有動力學習了