使startsWith
接受单词进行比较并返回一个函数,该函数将随后用作过滤器/回调函数:
function startsWith(wordToCompare) {
return function(element) {
return element.indexOf(wordToCompare) === 0;
}
}
addressBook.filter(startsWith(wordToCompare));
另一个选择是使用Function.prototype.bind
[MDN](仅在支持ECMAScript 5的浏览器中可用,请为较旧的浏览器使用填充程序链接)并“修复”第一个参数:
function startsWith(wordToCompare, element) {
return element.indexOf(wordToCompare) === 0;
}
addressBook.filter(startsWith.bind(this, wordToCompare));
我真的不明白如何传递默认参数
没什么特别的。在某个时候,filter
只需调用回调并传递数组的当前元素即可。因此,这是一个调用另一个函数的函数,在这种情况下,您将作为参数传递的回调。
这是类似功能的示例:
function filter(array, callback) {
var result = [];
for(var i = 0, l = array.length; i < l; i++) {
if(callback(array[i])) { // here callback is called with the current element
result.push(array[i]);
}
}
return result;
}