javascript - 结合返回嵌套函数的 JavaScript 函数声明或表达式
问题描述
这段代码出现在一个非常流行的 JS 教程中:
const sum = (function() {
"use strict";
return function sum(...args) {
return args.reduce((a, b) => a + b, 0);
};
})();
console.log(sum(1, 2, 3)); // 6
解决方案
使用像您的示例中那样立即调用的匿名函数通常仅出于隔离代码范围的目的。特别是在这种情况下,使用"use strict"
将严格模式专门限制在顶级函数内的代码中。
正如你所说,你可以只有一个函数而不是两个,但结果不一样:
const sum = (function() {
"use strict";
var x = something(); // strict mode enforced here
return function sum(...args) {
return args.reduce((a, b) => a + b, 0);
};
})();
和这里:
var x = something(); // strict mode not enforced here
function sum() {
"use strict";
return arguments.reduce((a, b) => a + b, 0);
};
此外,虽然在第二种方法中,函数必须在全局范围内声明,但在第一种方法中,您可以在顶级函数中声明许多函数,而不会污染全局范围。