【发布时间】:2016-03-02 20:58:50
【问题描述】:
我正在自己练习 Javascript,我有一个问题。
我创建了一个名为 "every" 的函数,它接受 2 个参数。 第一个参数是一个数组,第二个参数是一个布尔函数。 “每个”函数的作用是将布尔函数应用于数组中的每个元素,如果每个元素都返回 true,并且“每个”函数返回 true,否则返回 false。
例如,
console.log(every([NaN, NaN, NaN], isNaN));
// → true
console.log(every([NaN, NaN, 4], isNaN));
// → false
我想出了一个解决方案,它奏效了。
function every(array, bool) {
for (var i = 0; i < array.length; i++) {
if (!bool(array[i]))
return false;
}
return true;
}
但是,我尝试将 forEach 合并到函数中并想出了这个
function every(array, bool) {
array.forEach(function(element) {
if(!bool(element))
return false;
});
return true;
}
但第二个不起作用。我用http://www.pythontutor.com/跟踪每个执行步骤 并发现函数的“bool(element)”部分给了我未定义的而不是真或假。 所以我的问题是为什么它给我未定义?因为在这种情况下 bool(element) 应该与 isNaN(element) 相同。
【问题讨论】:
标签: javascript arguments undefined higher-order-functions