jquery的deferred對象的done方法和then方法都能實現鏈式調用,但是他們的作用是有區別的,then方法中如果你傳遞的方法有返回值,那么他會傳遞給下一個鏈式調用的方法。而done方法與此相反,你傳遞的方法就算有返回值,done方法也不會把你的返回值傳給下一個鏈式調用的方法的,
話不多說,直接上實例:
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 );
輸出結果如下:
結果分析:
1、第一個done和第二個done都返回了defer.resolve( 2, 3 )
2、done中callback的返回值不會被傳遞
3、第二個done只有一個參數,接收了defer.resolve( 2, 3 )的第一個參數2,所以result是2
4、第一個then接收defer.resolve( 2, 3 ),接收兩個參數,result是6,同時新建一個deferred object,傳遞result給deferred object
5、第三個done接收到了這個新的deferred object和傳遞的result,打印結果是6,并把這個新的deferred object傳遞給第二個then
6、第二個then現在接收新的deferred object,它只有一個參數,是result,所以參數b沒有定義,返回的結果是NaN,同時又新建一個deferred object
7、第四個done接收一個新建的deferred object,傳遞的參數是NaN,打印的結果自然就是NaN
以上這篇jquery中done和then的區別(詳解)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com