回調(diào)對(duì)象

$.Callbacks()

add方法

// 判斷條件
if (!options.unique || !self.has(arg)) {
  list.push(arg)
}
// 遞歸
if (arg && arg.length && typeof arg !== "string") {
  add(arg)
}
  1. 判斷條件比較復(fù)雜善于利用邏輯運(yùn)算符
  • 當(dāng)要求回調(diào)函數(shù)唯一,使用self.has檢查,在沒有的情況下添加
  • 當(dāng)不要求唯一,直接添加
  1. 當(dāng)傳入的是數(shù)組或者類數(shù)組(除字符串),要進(jìn)行遞歸
  2. 在add函數(shù)中,主要邏輯是放在一個(gè)閉包中的

fire相關(guān)方法

和fire相關(guān)的三個(gè)方法,核心相同。jQuery改版

for(;queue.length;firingIndex=-1) {
  var memory = queue.shift();
  while (++firingIndex < list.length) {
    if (list[firingIndex].apply(memory[0],memory[1]) === false && options.stopOnFalse) {
      firingIndex = list.length;
      memory = false;
    }
  }
}
  1. queue中應(yīng)該存儲(chǔ)的形式如下
  2. for并不是死循環(huán),當(dāng)內(nèi)部循環(huán)完畢第一輪,取出queue中第二個(gè)再次從新循環(huán)。結(jié)束條件是queue中數(shù)據(jù)執(zhí)行完畢
var queue = [[context1,[arg1,arg2,arg3]],[context2,[arg1,arg2,arg3]]]

memory參數(shù)的相關(guān)操作

memory現(xiàn)象分析

  1. $.Callbacks()參數(shù)是memory的情況下
  • 最后一次調(diào)用fire,會(huì)讓memory變量保存最后一次fire的參數(shù)
  • 在每次add時(shí),會(huì)檢查memory中是否存儲(chǔ)變量以及是否傳入?yún)?shù)memory

常用參數(shù)分析

  1. $.ajax()$.deferred()內(nèi)部實(shí)現(xiàn)中,常用$.Callbacks("memory once")
  2. 其運(yùn)行結(jié)果如下
  • 只運(yùn)行一次
  • 無論后續(xù)添加add多少,都運(yùn)行
  • 參數(shù)使用第一次傳入的
 function f1 (value) {
          console.log(value)
      }
      function f2 (value) {
          console.log("f2: " + value)
      }
      var callbacks = $.Callbacks("once memory");
      
      callbacks.add( f1 );
      callbacks.fire( "1" );
      
      callbacks.add( f1 );
      callbacks.fire( "2" );
      
      callbacks.add( f1 );
      callbacks.fire( "3" );
// 1
// 1
// 1
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容