我试图做以下事情:
function sum(a) {
return function (b) {
console.log(a + b);
}
}
var mySum = sum(10);
mySum(15);
输出:
25
不存储第一个结果,所以第二个函数类替换第一个结果:
function sum(a) {
return function (b) {
console.log(a + b);
}
}
sum(10);
sum(15);
输出将是:
25
这可能吗?
感谢。
答案 0 :(得分:1)
是有可能。只需将sum
的引用首先执行到内部函数即可。如下图所示
function sum(a) {
sum = function (b) { // here first time sum executes, it changes its reference
console.log(a + b);
}
}
输出
sum(10);
sum(5); --> 15
评论:它也在nodeJS中工作
正如聊天中所讨论的,使用 NodeJS模块时的问题是变量引用sum
。在我们的程序中,我们使用sum引用在第一次执行后指向不同的函数实例。但是require
将获得sum的引用,并且在该文件中我们使用另一个引用变量指向它。当我们使用其他引用变量调用时,它不会像引用sum
那样更新其引用。下面的代码是
sum.js
exports.sum = function(a) {
exports.sum = function (b) {
// here first time sum executes, it changes its reference
console.log(a + b);
}
}
run.js
var sumFunction = require('./sum.js');
sumFunction.sum(10);
sumFunction.sum(5); //15
我建议不要使用此模式,因为这会在代码中添加更多歧义。问题中的第一个模式是解决此类问题的正确方法。如果我发现任何更好的模式,我会更新这个答案。
答案 1 :(得分:0)
具有功能和属性的解决方案,用于保持结果。该物业是公开的。
function sum(a) {
sum.sum = (sum.sum || 0) + a;
document.write(sum.sum + '<br>');
}
sum(10);
sum(15);
document.write(sum.sum + '<br>');
或使用闭包
var sum = function () {
var a = 0;
return function (b) {
a += b;
document.write(a + '<br>');
}
}();
sum(10);
sum(15);