进行教科书练习:
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))
在我看来a
是item
参数,b
在index
参数中,但显然不是它如何&#39;工作......有人可以打破这种语法及其工作原理吗?
答案 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)
a
和b
,3
,6
在inBetween
的范围内定义,并在返回的匿名函数中引用,该函数是{的回调如4castle所示{1}},.filter()
在回调函数中为x