我想更好地理解,并开始用高阶函数编码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