在高阶函数javascript中传递参数

时间:2016-03-16 11:40:51

标签: javascript

function doSomething(numbers, doIt){
  numbers.forEach(doIt(number));
}

var result = [];
var arr = [1,2,3,4];
doSomething(arr, function(num){
 result.push(num);
})

console.log(result);

嗨,

为什么我从上面的代码中收到错误“数字未定义”? 数字应该是arr中的每个元素,为什么没有定义?

感谢。

6 个答案:

答案 0 :(得分:1)

您的函数doSomething必须像这样

function doSomething(numbers, doIt) {
    numbers.forEach(doIt); // here you pass the function
}

答案 1 :(得分:0)

在你的函数中,在调用doIt时检查数字的拼写,数字变量在任何地方都不可用,因此会抛出错误。

如果你想将doIt作为回调,你只需将其称为numbers.forEach(doIt);

答案 2 :(得分:0)

doIt(number) 执行函数doIt,传递变量number。在调用时,该变量显然不存在。

您真正想要的是将doIt作为回调传递给forEach,让forEach执行该函数,并将其传递给一个数字。要做到这一点,你只需要:

function doSomething(numbers, doIt){
  numbers.forEach(doIt);
}

答案 3 :(得分:0)

您将未定义的参数传递给doIt函数。

改变:

numbers.forEach(doIt(number));

到此:

numbers.forEach(doIt);

<强> Fiddle

答案 4 :(得分:0)

function doSomething(numbers, doIt){
  numbers.forEach(doIt);
}

var result = [];
var arr = [1,2,3,4];
doSomething(arr, function(num){
 result.push(num);
})

console.log(result);

使用它代替,因为你已经在迭代数字数组并将函数作为第二个参数传递,这将在数字数组中执行num =>每个项目。

答案 5 :(得分:0)

你需要将一个闭包传递给forEach来捕获number变量以传递给doIt,或者只是将doIt传递给forEach回调而不调用它。

捕获选项:

function doSomething(numbers, doIt){ 
  numbers.forEach(function (number) { 
    doIt(number); 
  }); 
} 
var result = []; 
var arr = [1,2,3,4]; 
doSomething(arr, function(num){ 
  result.push(num); 
}); 

console.log(result);

传递回叫选项:

function doSomething(numbers, doIt){ 
  numbers.forEach(doIt); 
} 
var result = []; 
var arr = [1,2,3,4]; 
doSomething(arr, function(num){ 
  result.push(num); 
}); 

console.log(result);