我想更好地理解,並開始用高階函數編碼JS。以下僅僅是一個慣例,我做的,我要輸出數值數組* 2高階函數javascripts
function each(collection, callback) {
for(var i = 0; i < collection.length; i++) {
callback(collection[i]);
}
}
function isNumber(item) {
var arr = [];
if(typeof item === "number") {
arr.push(item * 2);
}
return arr;
}
each([1, 2, 3, 4, "String"], isNumber);
從我的理解,當每個()函數調用時使用數組和ISNUMBER參數,它通過函數運行每。當調用每個函數時,它會調用array [i]的isNumber函數,然後調用該數組[i]的isNumber函數,並且如果數組[i]的類型是數字,它會將該數字* 2推送到陣列。我期待的輸出是
[2, 4, 6, 8] since "String" is not a number it never got pushed into the array.
我不理解這個嗎?當我嘗試記錄此代碼時,沒有輸出顯示。
每次調用isNumber時,都會將您的數組重新定義爲一個空數組。 –
範圍。你的'var arr'僅限於isNumber函數,因此每次調用'isNumber()'時都會有一個新數組。返回值 - 您看不到由isNumber返回的值。 –
您從不對'isNumber'的結果做任何處理,無論如何都有錯誤的簽名 - 它只有一個要處理的項目,並且應該根據名稱返回true或false。 – user2864740