JavaScript问题的箭头函数-多个箭头函数嵌套



我在leetcode上练习JS时看到了一个答案,但我不明白这意味着什么。有人能扩展代码吗?或者告诉我如何阅读。

https://leetcode.com/problems/running-sum-of-1d-array/discuss/702025/one-liner

let runningSum = nums => nums.map((sum => el => sum += el)(0));
console.log(runningSum([1,2,3,4]))

原始函数

let runningSum = nums => nums.map((sum => el => sum += el)(0));

(sum => el => sum += el)

function f1(sum) {
return function f2(el) {
return sum += el;
}
}

(或箭头格式,如@Alterlife所示(

然后,原始函数转换为

let runningSum = nums => nums.map(f1(0));

nums.map(f1(0));

成为

const result = [];
const f2 = f1(0);
for(let i = 0; i < nums.length; ++i) {
const num = nums[i];
result.push(f2(num));
}

因此,将原始函数转换为

const nums = [1,2,3,4];
function f1(sum) {
return function f2(el) {
return sum += el;
}
}
const result = [];
const f2 = f1(0);
for(let i = 0; i < nums.length; ++i) {
const num = nums[i];
result.push(f2(num));
}
console.log(result);

让我们试着把它分解。

(sum => el => sum += el),相当于:

const mySumFunction = (sum) => {
const addToSum = (el) => { 
sum += el;
return sum;
}
return addToSum;
}

这是一个函数,它接受一个参数-一个起始和。sum参数也是函数范围内的局部变量。

当您调用mySumFunction时,它会返回另一个函数,该函数会添加到局部范围的变量sum中,并返回到目前为止的总和。

实际上,它创建了一个";具有存储器的功能";它返回到目前为止传递给它的所有内容的总和。

你可以测试如下:

cumilativeSum = mySumFunction(0)
console.log(v(1)) // returns 1
console.log(v(1)) // returns 2
console.log(v(4)) // returns 6

现在让我们从整体上看代码。

let runningSum = nums => nums.map((sum => el => sum += el)(0));

传递到映射函数(sum => el => sum += el)(0)中的整个片段创建一个";具有存储器的和函数";从0开始,正如我们上面计算的那样。

我们将数组中的每个数字传递给它,并创建一个具有累积和的数组。

让我们将(sum => el => sum += el)(0)这个自调用箭头函数用于映射的第一次迭代。在执行时,它返回另一个箭头函数el => sum += el。sum的值是作为参数传递的0。现在继续来看我们的地图第一次迭代

let runningSum = nums => nums.map(el => sum = 0 + el);

它返回1。因此,对于第二次迭代,和的值为1,el为2。因此它返回3,然后返回6,然后返回10。

let runningSum = (nums) =>
nums.map(
(function (sum) {
return (el) => (sum += el);
})(0)
);
console.log(runningSum([1, 2, 3, 4]));

相关内容

  • 没有找到相关文章

最新更新