我遇到了一个奇怪的代码,我对此并不了解。如果我得到解释会很好。
function forEach(array, action) {
for (var i = 0; i < array.length; i++) {
action(array[i]);
}
}
var numbers = [1, 2, 3, 4, 5], sum = 0;
forEach(numbers, function (number) {
sum += number;
});
console.log(sum);
函数如何作为参数传递?以及内部函数如何获得该数字。
答案 0 :(得分:6)
在JavaScript中,函数是所谓的一等公民(对其他语言不一定如此),这意味着函数可以被视为数据,你可以通过作为参数,从其他函数返回函数,创建函数并将它们分配给变量。
这是一个非常简单的例子:
function callWithoutParams(fn) {
return fn(); // fn is the passed function.
}
let rand = callWithoutParams(Math.random); // Passing Math.random as a function.
callWithoutParams(() => console.log(42)); // Passing anonymous function
Array.prototype.forEach()
接受一个函数作为参数,在数组中的每个元素上运行它。所以一个更简单的例子是:
[1,2,3,4,5].forEach((element) => console.log(element)); // outputs 1-5 in order.
答案 1 :(得分:0)
在javascript中,一切都是对象,包括function
。
为简单起见,请查看以下示例:
var func = function(number){
console.log(number);
}
var arr = [1,2,3,4,5];
function foreach(data, callback){
for(var i = 0; i<data.length; i++){
callback(data[i]);
}
}
foreach(arr, func);
在JS中,您可以将函数赋值给变量。这被称为Function Expression。因此它充当普通变量,只是它的类型是对象。
这允许我们将函数作为参数传递。
现在你的第二个问题,内部函数如何获得该数字。
在您的代码中,action(array[i]);
将值作为参数传递,因此
function (number) {
sum += number;
}
此处number
为array[i]
。