Javascript嵌套函数调用始终返回true值

时间:2019-01-09 20:31:09

标签: javascript function

以下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知识?

2 个答案:

答案 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