参数如何在这个函数中传递?

时间:2017-10-12 23:10:19

标签: javascript

进行教科书练习:

let arr = [1, 2, 3, 4, 5, 6, 7];

function inBetween(a, b) {
  return function(x) {
    return x >= a && x <= b;
  };
}

alert( arr.filter(inBetween(3, 6)) ); // 3,4,5,6

教科书还指出filter语法为:

let results = arr.filter(function(item, index, array) {
  // should return true if the item passes the filter
});

所以我并不完全理解inBetween(a,b)函数的工作方式......就像在这一行中一样:

arr.filter(inBetween(3,6))

在我看来aitem参数,bindex参数中,但显然不是它如何&#39;工作......有人可以打破这种语法及其工作原理吗?

2 个答案:

答案 0 :(得分:2)

因此,filter方法接受一个应该返回true或false的函数,无论是否保留该项。

在这个例子中,不是在过滤器中编写该函数,而是将其写在外面并传入。但是你仍然可以这样思考:

let results = arr.filter(function(item, index, array) {
    return item >= 3 && item <= 6;
});

您在过滤器之外定义inBetween的原因是您可以传入值而不是像上面那样将它们硬编码到过滤器中。

当您致电inBetween(3,6)时,返回的是:

function(x) {
    return x >= 3 && x <= 6;
}

如上所述,然后将其放入过滤器中(因为不需要index/array参数,所以没有let results = arr.filter(function(x) { return x >= 3 && x <= 6; }); 参数:

{{1}}

答案 1 :(得分:0)

ab36inBetween的范围内定义,并在返回的匿名函数中引用,该函数是{的回调如4castle所示{1}},.filter()在回调函数中为x