返回功能以供进一步使用,但不存储较旧的结果

时间:2015-11-06 19:54:40

标签: javascript closures

我试图做以下事情:

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

这可能吗?

感谢。

2 个答案:

答案 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中工作

enter image description here

正如聊天中所讨论的,使用 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);