函数如何传递给另一个函数?

时间:2016-02-01 10:04:49

标签: javascript function

我遇到了一个奇怪的代码,我对此并不了解。如果我得到解释会很好。

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);

函数如何作为参数传递?以及内部函数如何获得该数字。

2 个答案:

答案 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;
}

此处numberarray[i]