将函数作为参数传递“试图理解链接”

时间:2019-04-19 22:56:54

标签: javascript

只需学习一些javascript ...

我目前已对此进行编码:

// an array of random years
var years = [1990, 1965, 1937, 1998, 1988];

// function to place all given values into a new array in this case arrRes
function arrayCalc(arr, fn){
  var arrRes = [];
  for (var i = 0; i < arr.length; i++) {
    arrRes.push(fn(arr[i]));
  }
  return arrRes;
}


//function to calculate the age
function calcage(el){
  return  2019 - el;
}


var ages = arrayCalc(years, calcage);
console.log(ages);

我知道该如何编码,因为它通过重复而卡在了我的脑海中。

但是,就所有代码和功能之间的链接而言,我仍然无法弄清后台发生了什么。

主要是最后一部分是我更困惑的地方,我不了解el与其余代码之间的联系,以及它如何像现在一样返回值?请更深入地解释吗?

提前谢谢!

2 个答案:

答案 0 :(得分:2)

调用arrayCalc(years, calcage)时,变量arr将被设置为years,变量fn将被设置为calcage

在循环中,您呼叫fn(arr[i])。由于上述参数分配,因此它等效于calcage(years[i])

calcage内,el设置为years[i],它从2019中减去它并返回。然后将结果推送到arrRes中的arrayCalc上。

顺便说一句,您的arrayCalc函数等效于内置的map数组方法。 arrayCalc(years, calcage)可以写为years.map(calcage)

答案 1 :(得分:0)

从结尾开始:

var ages = arrayCalc(years, calcage);

years是一个数组,而calcage是一个函数,两者都传递给arrayCalc函数。 (请注意,参数是“ calcage”,而不是“ calcage()”-如果没有parens,它将参数本身传递给arrayCalc;使用parens,它将调用calcage函数并传递其 output 到arrayCalc。)

现在跳回到arrayCalc本身:

function arrayCalc(arr, fn){

在arrayCalc内,arr是作为“年份”传递的数组,而fn是作为“ calcage”传递的函数。因此,在arrayCalc中,调用fn()与直接调用calcage()一样。

因此,当arrayCalc调用fn(arr[i])时,它最终会将arr [i]的内容传递给calcage():

function calcage(el){

将该值命名为“ el”,进行一些数学运算并返回结果(返回到arrayCalc,后者将其推到最终将返回到ages的数组中。)

(可能值得指出的是,仅给出此代码,没有实际的理由将calcage作为函数参数传递,而不仅仅是直接调用它。当您可能要传入的多个不同函数时,这种事情会变得有用arrayCalc;那么它可以是通用的“对您传递给我的任何任务执行此数组中的每个元素”,而不是“对此数组中的每个元素执行此特定操作”。)