如何将匿名函数作为内部使用的参数传递?

时间:2014-06-17 13:10:40

标签: javascript arguments

我遇到了一些我无法完全理解的代码。这些原则看起来很清楚,但是我在forEach函数调用中声明的第二个参数遇到了一些困难。很明显,匿名函数是通过action参数传递给forEach的,但是在for循环中它是如何工作的呢?

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

我认为最让我困惑的是,匿名函数的语法与action(array[i])似乎兼容 - 我的意思是,我理解sum获取每个值反过来,但如果函数“替换”action参数,(array[i])部分的位置和位置在哪里?

2 个答案:

答案 0 :(得分:1)

让我以更明确的方式重写该代码:

function forEach(array, action) {   //1st parameter is an array, the 2nd is a function
  for (var i = 0; i < array.length; i++)
    action(array[i]); //The function is used, with each element of the array as parameter
}

var numbers = [1, 2, 3, 4, 5], sum = 0;

var myFunction= function (number) { //I declare a function which receives a number
  sum += number;                    //and adds it to sum.
}

forEach(numbers,myFunction); //I call the forEach function using the
                             // variables I previously created as parameters

console.log(sum);

答案 1 :(得分:0)

在javascript中定义您编写的变量时:

var x = 0; // here you reserve an object

当你定义一个函数时,你也保留一个对象。 Javascript将函数作为对象处理,您可以将它分配给任何变量:

var x = function(number){ sum +=number; };
forEach (numbers, x(number) );

关于混淆语法,匿名函数是在运行时动态声明的函数。它们被称为匿名函数,因为它们没有像普通函数那样被赋予名称。 因此,要调用匿名函数,请遵循以下语法:

// call
function (param1, param2, ...){
// function body
}

如果你想再次调用它,你应该重复上面的代码或声明一个函数而不调用它并将它保存在变量上,你可以多次调用它:

// declaration
var x = function(param1, param2, ...){
    // body
};
// call
x(p1,p2,....);