jquery中done和then的區(qū)別(詳解)
jquery的deferred對(duì)象的done方法和then方法都能實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用,但是他們的作用是有區(qū)別的,then方法中如果你傳遞的方法有返回值,那么他會(huì)傳遞給下一個(gè)鏈?zhǔn)秸{(diào)用的方法。而done方法與此相反,你傳遞的方法就算有返回值,done方法也不會(huì)把你的返回值傳給下一個(gè)鏈?zhǔn)秸{(diào)用的方法的,
話不多說(shuō),直接上實(shí)例:
var defer = jQuery.Deferred(); defer.done(function(a,b){ console.log("a = " + a+"b = " + b); return a * b; }).done(function( result ) { console.log("result = " + result); }).then(function( a, b ) { console.log("a = " + a+"b = " + b); return a * b; }).done(function( result ) { console.log("result = " + result); }).then(function( a, b ) { console.log("a = " + a+"b = " + b); return a * b; }).done(function( result ) { console.log("result = " + result); }); defer.resolve( 2, 3 );
輸出結(jié)果如下:
結(jié)果分析:
1、第一個(gè)done和第二個(gè)done都返回了defer.resolve( 2, 3 )
2、done中callback的返回值不會(huì)被傳遞
3、第二個(gè)done只有一個(gè)參數(shù),接收了defer.resolve( 2, 3 )的第一個(gè)參數(shù)2,所以result是2
4、第一個(gè)then接收defer.resolve( 2, 3 ),接收兩個(gè)參數(shù),result是6,同時(shí)新建一個(gè)deferred object,傳遞result給deferred object
5、第三個(gè)done接收到了這個(gè)新的deferred object和傳遞的result,打印結(jié)果是6,并把這個(gè)新的deferred object傳遞給第二個(gè)then
6、第二個(gè)then現(xiàn)在接收新的deferred object,它只有一個(gè)參數(shù),是result,所以參數(shù)b沒(méi)有定義,返回的結(jié)果是NaN,同時(shí)又新建一個(gè)deferred object
7、第四個(gè)done接收一個(gè)新建的deferred object,傳遞的參數(shù)是NaN,打印的結(jié)果自然就是NaN
以上這篇jquery中done和then的區(qū)別(詳解)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript 學(xué)習(xí)筆記之一jQuery寫(xiě)法圖片等比縮放以及預(yù)加載
以前對(duì)于JavaScript總是在用到的時(shí)候在頁(yè)面上寫(xiě)幾個(gè)函數(shù),基本沒(méi)考慮到函數(shù)的封裝與重用,最近有個(gè)項(xiàng)目可能對(duì)于這方面要求有點(diǎn)高,所以就研究了下類似jQuery的封裝2012-06-06jQuery實(shí)現(xiàn)底部浮動(dòng)窗口效果
這篇文章主要介紹了jQuery實(shí)現(xiàn)底部浮動(dòng)窗口效果,涉及jQuery事件響應(yīng)及頁(yè)面元素動(dòng)態(tài)變換的相關(guān)操作技巧,需要的朋友可以參考下2016-09-09解決jquery操作checkbox火狐下第二次無(wú)法勾選問(wèn)題
在工作中使用jquery操作checkbox,進(jìn)行全選、反選,現(xiàn)在的問(wèn)題是火狐下第二次無(wú)法勾選問(wèn)題,在下面有個(gè)詳細(xì)的解答,感興趣的朋友可以參考下2014-02-02jquery隊(duì)列queue與原生模仿其實(shí)現(xiàn)方法分享
jquery中的queue和dequeue是一組很有用的方法,他們對(duì)于一系列需要按次序運(yùn)行的函數(shù)特別有用。特別animate動(dòng)畫(huà),ajax,以及timeout等需要一定時(shí)間的函數(shù)2014-03-03jQuery.form.js插件不能解決連接超時(shí)(timeout)的原因分析及解決方法
jQuery.form.js是一個(gè)form插件,支持ajax表單提交和ajax文件上傳。最近在使用jquery.form.js提交包含文件的表單時(shí),當(dāng)碰上網(wǎng)速較慢時(shí),而我們又設(shè)置了timeout時(shí)我們的頁(yè)面會(huì)死在這里,怎么回事呢,下面腳本之家小編給大家解答下2016-10-10