課程
/前端開發
/jQuery
/jQuery源碼解析(架構與依賴模塊)
如果這樣寫,在回調函數中,只有通過this去取值了,。應該寫成callback.apply(obj[i], i, obj[i], args)
2016-08-12
源自:jQuery源碼解析(架構與依賴模塊) 2-11
正在回答
each:?function(obj,?callback,?args)?{???? var?value,???? i?=?0,???? length?=?obj.length,???? isArray?=?isArraylike(obj);?//?判斷是不是數組???? //?傳了第三個參數???? if?(args)?{???? if?(isArray)?{???? for?(;?i?<?length;?i++)?{???? //?相當于:???? //?args?=?[arg1,?arg2,?arg3];???? //?callback(args1,?args2,?args3)。然后callback里邊的this指向了obj[i]???? value?=?callback.apply(obj[i],?args);???? if?(value?===?false)?{???? //?注意到,當callback函數返回值會false的時候,注意是全等!循環結束???? break;???? }???? }???? //?非數組???? }?else?{???? for?(i?in?obj)?{???? value?=?callback.apply(obj[i],?args);???? if?(value?===?false)?{???? break;???? }???? }???? }???? //?A?special,?fast,?case?for?the?most?common?use?of?each???? }?else?{???? //?數組???? //?其實這里代碼有點贅余,如果考慮代碼的簡潔性犧牲一點點性能???? //?在處理數組的情況下,也是可以用?for(i?in?obj)的???? if?(isArray)?{???? for?(;?i?<?length;?i++)?{???? //?相當于callback(i,?obj[i])。然后callback里邊的this指向了obj[i]???? value?=?callback.call(obj[i],?i,?obj[i]);???? if?(value?===?false)?{???? break;???? }???? }???? //?非數組???? }?else?{???? for?(i?in?obj)?{???? value?=?callback.call(obj[i],?i,?obj[i]);???? if?(value?===?false)?{???? break;???? }???? }???? }???? }???? return?obj;???? },
源碼里面有兩個,教程里面是帶有第三方參數的
apply 和 call 第一個參數都是指代的是 callback 函數中 this 環境。
如果按照你的寫法:callback.apply(obj[i], args)。this 指向obj[i]沒有意義。
舉報
由淺入深地剖析jQuery庫的設計與實現,揭開框架背后的秘密
3 回答value = callback.apply(obj[i], args);這個怎么傳上下文的?誰調用callback
3 回答for (; i < length; i++) {
1 回答callback回調問題(輸出的結果為什么是這樣)
1 回答eq實現中的 j = +i + ...中的 +i 是什么意思?
3 回答正則有問題
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2018-07-27
2018-07-27
源碼里面有兩個,教程里面是帶有第三方參數的
2016-09-01
apply 和 call 第一個參數都是指代的是 callback 函數中 this 環境。
如果按照你的寫法:callback.apply(obj[i], args)。this 指向obj[i]沒有意義。