2017-10-12 38 views
1

做课本练习其中:这个函数的参数是如何传递的?

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参数中,但显然这不是它的工作方式......有人可以分解这个语法以及为什么它的工作原理?

+3

'x'是' item参数'inBetween'返回一个用于过滤器的函数 – 4castle

+0

'inBetween'是一个*高阶函数*,它在调用时返回一个函数* –

+0

参见[了解返回函数(x)外面的乐趣ction(阵列)](https://stackoverflow.com/q/36664970/1048572) – Bergi

回答

2

所以过滤器方法接受一个函数,该函数应该返回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; 
}); 
0

ab36inBetween范围被定义和引用的所述返回的匿名功能这是.filter()回调,通过4castle所示内,xitem在回调函数

相关问题