只需学习一些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
与其余代码之间的联系,以及它如何像现在一样返回值?请更深入地解释吗?
提前谢谢!
答案 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;那么它可以是通用的“对您传递给我的任何任务执行此数组中的每个元素”,而不是“对此数组中的每个元素执行此特定操作”。)