//首先將myFilter方法添加在數組的原型之上,達到和filter,sort等方法在任意數組實例上調用的效果
//這個callback就是你在調用myFilter這個方法的時候傳進去的函數
Array.prototype.myFilter?=?function?(callback)?{
????//定義一個空數組用于返回結果數組
????var?array?=?[];
????//遍歷當前的數組實例,也就是this
????for?(var?i?=?0;?i?<?this.length;?i++)?{
????????//執行callback,將本次循環的數組的元素,當前元素的下標和數組實例本身作為參數傳給callback
????????//callback需要返回一個布爾值
????????if?(callback(this[i],i,this))?{
????????????//當callback執行結果為真時,表明當前元素符合條件
????????????//將當前的這個數組元素添加進結果數組
????????????array.push(this[i]);
????????}
????}
????//返回結果數組
????return?array;
}
//創建一個數組實例testArr
var?testArr?=?[1,2,3,4,5,6];
//調用myFilter方法,并傳入一個函數
testArr.myFilter(function(a){
????//這個函數的形參a其實就是數組的一項
????//你可以看上面的myFilter的具體實現,因為myFilter調用后,會遍歷調用myFilter的數組實例
????//那么在每一次循環的過程中,都會將數組的當前一項作為參數傳遞給當前函數
????//則此函數執行的結果是真是假,就會影響結果數組的元素
????return?a>3;
})
因為這個a是這個回調函數的參數,上面我寫了一個簡單的myFilter方法實現了類似filter的功能
這個函數在執行循環的時候,會調用這個callback,并將當前的數組項傳入