jquery1.7.2的源碼分析(三)$.Deferred

來源:互聯網
上載者:User

標籤:idt   cal   .sh   alt   sts   jquer   arguments   list   deferred   

例子的詳細講解
Filter Resolve

 

上面的的代碼是怎麼啟動並執行呢

點擊button的先執行 $.Deferred(),得到具有很多方法的defer

defer.resolve( 5 );

var doneList = jQuery.Callbacks( "once memory" ),failList = jQuery.Callbacks( "once memory" ),progressList = jQuery.Callbacks( "memory" ),state = "pending";lists = {resolve: doneList,reject: failList,notify: progressList}for ( key in lists ) {deferred[ key ] = lists[ key ].fire;deferred[ key + "With" ] = lists[ key ].fireWith;}//根據上面的代碼可得//deferred[ ‘resolve‘]=lists[ ‘resolve‘].fire;//deferred[ ‘resolveWidth‘]=lists[ ‘resolve‘].fireWith;//deferred[ ‘reject‘]=lists[ ‘reject‘].fire;//deferred[ ‘rejectWidth‘]=lists[ ‘reject‘].fireWith;//deferred[ ‘notify‘]=lists[ ‘notify‘].fire;//deferred[ ‘notifyWidth‘]=lists[ ‘notify‘].fireWith;//因此resolve( 5 )執行了


fire: function() {    self.fireWith( this, arguments );    return this;},fireWith: function( context, args ) {//stack=[];為true;firing 為false;flag={}    if ( stack ) {        if ( firing ) {            if ( !flags.once ) {                stack.push( [ context, args ] );            }//memory =undefined        } else if ( !( flags.once && memory ) ) {            fire( context, args );        }    }    return this;}
fire = function( context, args ) {        args = args || [];//memory = [ context, args ];即為self,和5        memory = !flags.memory || [ context, args ];        fired = true;        firing = true;        firingIndex = firingStart || 0;        firingStart = 0;        firingLength = list.length;        for ( ; list && firingIndex < firingLength; firingIndex++ ) {//函數執行後為false並且flags.stopOnFalse 為true時memory = true;//注意這裡執行了函數            if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {                memory = true; // Mark as halted                break;            }        }        firing = false;        if ( list ) {            if ( !flags.once ) {                if ( stack && stack.length ) {                    memory = stack.shift();                    self.fireWith( memory[ 0 ], memory[ 1 ] );                }            } else if ( memory === true ) {                self.disable();            } else {//最終又把list函數組給賦值為空白                list = [];            }        }    }

jquery1.7.2的源碼分析(三)$.Deferred

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.