以下javascript代码有效:
const numbers = [10, 15, 20, 25, 30];
function nesting(array, iteratorFunction) {
let f2 = function(b){
return false;
}
return array.filter(
function(a){
return f2(a)
}
);
}
当f2返回[]
时,结果为false
;如果将f2更改为返回[10, 15, 20, 25, 30]
,则结果为true
。
为什么在这个方向替换后它不能正常工作,我只是用原来的f2定义替换了变量f2?
function nesting(array, iteratorFunction) {
return array.filter(
function(a){
return function(b){
return false;
}
}
);
}
内部函数返回[10, 15, 20, 25, 30]
还是true
都会返回false
。为什么?我缺少什么JavaScript知识?
答案 0 :(得分:1)
代码不相同。
在第一个示例中,您要调用f2
,然后使用它返回的内容进行过滤。
在第二个示例中,您从不调用函数;您将在过滤函数中返回未调用的函数。由于函数本身是真实的,因此它允许所有元素,无论函数返回什么。
要使其等效,您需要调用内部函数:
. . .
function(a){
return (function(b){
return false;
})(a); // Add parenthesis to call
}
. . .
答案 1 :(得分:1)
在第二个代码段中,您永远不会执行f2函数
{systemnotes.date} >= '01/01/2018' AND
{systemnotes.date} <='12/31/2018