jQuery原始碼分析系列 Callback深入

2022-02-22 01:07:37 字數 1981 閱讀 6549

關於callbacks

$.callbacks()的內部提供了jquery的$.ajax()$.deferred()基本功能元件

在針對ajax處理中,用的最多的就是once memory的組合

/*

* * 所有的**佇列,不管任何時候增加的**保證只觸發一次

* @type */

completedeferred = jquery.callbacks("once memory"),

在deferred中的done與fail

var tuples =[

//action, add listener, listener list, final state

["resolve", "done", jquery.callbacks("once memory"), "resolved"],

["reject", "fail", jquery.callbacks("once memory"), "rejected"],

["notify", "progress", jquery.callbacks("memory")]

],

once,memory確保這個**列表只執行( .fire() )一次(像乙個遞延 deferred).

保持以前的值,將新增到這個列表的後面的最新的值立即執行呼叫任何** (像乙個遞延 deferred).

once的時候只允許add一次,在觸發fire之後就會理清掉list

disable: function

() ,

所以後續的操作都是無用的

memory方法就比較特殊了, 有點類似deferred的感覺,就是能夠等全部的add都載入完畢後才觸發

memory的實現思路就是在add的時候直接觸發fire,從而再次執行list列表

firingstart =start;

fire(memory);

因為memory是基於在當前add的時候出發fire保持以前的值,將新增到這個列表的後面的最新的值立即執行呼叫任何**

那麼就只會遞迴出包括當前以前的所有佇列

var callbacks = $.callbacks("memory");

callbacks.add( fn1 );

callbacks.fire( "1");

callbacks.add( fn1 );

callbacks.fire( "2");

callbacks.add( fn1 );

callbacks.fire( "3");

callbacks.add( fn1 );

callbacks.fire( "4" );

fn1 says: 1fn1 says: 1fn1 says: 2fn1 says: 2fn1 says: 2fn1 says: 3fn1 says: 3fn1 says: 3fn1 says: 3fn1 says: 4fn1 says: 4fn1 says: 4fn1 says: 4
組合

jQuery原始碼分析系列

斷斷續續地看jquery原始碼,第一次萌生看jq原始碼的念頭,當時還是版本1.7.2,由於工作中沒有用到jq的機會,連 有幾種用法都還不知道,就開始啃原始碼,痛苦自然是少不了的,於是不久就放棄扔一邊了。等到工作中終於就機會用jq了 撒花 又萌生了啃jq原始碼的念頭,此時jq版本已經是2.0了。鑑於瀏...

jQuery原始碼分析系列

版本截止到2013.8.24 jquery官方發布最新的的2.0.3為準 附上每一章的原始碼注釋分析 正在編寫的書 jquery架構設計與實現 本人在慕課網的教程 完結 jquery原始碼解析 架構與依賴模組 64課時 jquery原始碼解析 dom與核心模組 64課時 jquery原始碼分析目錄 ...

jQuery原始碼分析

工具 版本說明 版本號備註 jquery 2.1.1 sublime 3jquery function selector,context jquery.fn jquery.prototype 快速匹配正則 不加g 不光匹配整體項還會匹配到子項 rquickexpr s w w w init jque...