亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

callback.apply(obj[i], args)這樣寫有問題

如果這樣寫,在回調函數中,只有通過this去取值了,。應該寫成callback.apply(obj[i], i, obj[i], args)

正在回答

3 回答

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;????
				},


0 回復 有任何疑惑可以回復我~
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;

},

源碼里面有兩個,教程里面是帶有第三方參數的

1 回復 有任何疑惑可以回復我~

apply 和 call 第一個參數都是指代的是 callback 函數中 this 環境。

如果按照你的寫法:callback.apply(obj[i], args)。this 指向obj[i]沒有意義。

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

callback.apply(obj[i], args)這樣寫有問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號