NodeJS 你能给我解释一下JS代码吗?它是如何工作的?

gdrx4gfi  于 2023-01-12  发布在  Node.js
关注(0)|答案(1)|浏览(113)
console.log([1 , 2, 3 , 4 , 5].map((acc = 0 , num => acc += num)));
// output : [1, 3, 6, 10, 15]

我知道闭包已经被应用到这段代码中,但是不知道它是如何一步一步地工作的--我想把它形象化。
我们知道该Map具有以下签名:

array.map(function(currentValue, index, arr), thisValue)

有了这个,谁能给我解释一下上面的代码?

zwghvu4y

zwghvu4y1#

从技术上讲,这是创建一个闭包,但关键部分是声明一个全局变量acc(除非acc已经存在于当前作用域中),用值0初始化它,然后在匿名arrow函数中使用它,通过使用grouping operatorcomma operator,这是内联完成的。

console.log([1 , 2, 3 , 4 , 5].map((acc = 0 , num => acc += num)));
// output : [1, 3, 6, 10, 15]

console.log(acc, window.acc); // acc exists globally

它相当于:

acc = 0;
console.log([1 , 2, 3 , 4 , 5].map(num => acc += num));
// output : [1, 3, 6, 10, 15]

console.log(acc, window.acc); // acc exists globally

注意,在strict mode中,除非之前声明了变量,否则程序将失败。

"use strict";

console.log([1 , 2, 3 , 4 , 5].map((acc = 0 , num => acc += num)));
// output : ReferenceError: Can't find variable: acc

console.log(acc, window.acc); // acc doesn't exist because program exits
"use strict";

let acc;

console.log([1 , 2, 3 , 4 , 5].map((acc = 0 , num => acc += num)));
// output : [1, 3, 6, 10, 15]

console.log(acc, window.acc); // acc doesn't exist globally, but it does locally

相关问题