我正在学习javascript。我知道在定义函数后我们可以将函数传递给其他函数。但是我需要帮助来理解这个例子:
function map(func, array) {
var result = [];
forEach(array, function (element) {
result.push(func(element));
});
return result;
}
根据我的理解,func是map的参数。我需要提供一个函数作为func。但是在我正在阅读的教程中,它没有提到这个函数的来源,似乎没有必要指定这个参数?本教程中的另一个例子是相同的:
function count(test, array) {
return reduce(function(total, element) {
return total + (test(element) ? 1 : 0);
}, 0, array);
}
此测试函数等于元素=== 0? 1:0,但教程没有说我需要写下测试功能。我需要编写这个测试函数吗?
答案 0 :(得分:4)
编辑: 在您发布的教程的链接中,传递的函数是预定义的函数Math.round
。我的下面的例子显示了创建自己的函数来传递。
map
示例显示了实现。调用map
时,您将提供函数(和数组)。
从它的外观来看,map
将数组中的当前项传递给你的函数,你的函数应该对它做一些事情并返回结果。函数返回的结果将添加到新数组中。
var arr = [1,2,3,4,5];
var my_func = function(item) { return item * 2; };
var new_arr = map(my_func, arr);
console.log(new_arr); // [2,4,6,8,10]
我们创建了一个数组(arr
),
我们创建了一个函数(my_func
),它接受它给出的任何内容,然后将它乘以2.
我们将两者都传递给map
map
函数迭代我们的arr
,将每次迭代中的当前项传递给我们的函数。
我们的函数获取当前项,并返回乘以2的结果。
map
函数获取该结果,并将其添加到新数组中。
迭代完成后,map
函数返回新数组。
答案 1 :(得分:0)
调用map时,可以传递内联函数或现有函数。
// The following would return [2,3,4]
map(function(item) { return item + 1}, [1,2,3]);
function double(item) {return item*2}
map(double, [1,2,3])
// returns [2,4,6]
// Your example, Math.round
map(Math.round, [0.01, 2, 9.89, Math.PI])
// returns [0,2,10,3]
另一种说法是,函数可以像任何其他参数一样传递给另一个函数。这与函数就像任何其他变量可以从函数
传递或返回一样function createAdder(toAdd) {
return function (num) {
return num + toAdd;
}
}
var add5 = createAdder(5);
add5(2); // returns 7
var add7 = createAdder(7);
add7(-2); // returns 5