Javascript 返回函数以供进一步使用,但不存储旧的结果

Javascript 返回函数以供进一步使用,但不存储旧的结果,javascript,closures,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 这可能吗 谢

我正在努力做到以下几点:

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
这可能吗


谢谢。

是的这是可能的。只需在第一次执行时将
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模块时出现的问题是变量reference
sum
。在我们的程序中,我们使用sum引用在第一次执行后指向不同的函数实例。但是
require
将获得sum的引用,在该文件中,我们使用另一个引用变量来指向它。当我们使用另一个引用变量调用时,它不会像reference
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

我建议不要使用这种模式,因为这会在代码中增加更多的歧义。你问题中的第一种模式是解决这类问题的正确方法。如果我找到了更好的模式,我会更新这个答案

具有函数和属性的解决方案,用于保留结果。该房产是公共的

函数和(a){
sum.sum=(sum.sum | | 0)+a;
编写(sum.sum+'
'); } 总数(10); 总数(15);
编写(sum.sum+'
')嗯,有什么奇怪的。。我在node.js中就是这样使用的,在@rajuGTOh中根本不起作用!它在浏览器中工作。好的,试试这个,而不是命名函数
函数和(a){
将其更改为
var-sum=function(a){
,并告诉我它是否有效。它在nodeJS中对我有效(附加快照)还有firebug/devtools。这太奇怪了,我实际上是在我的atomnow中复制和粘贴你的代码。现在是打印TypeError:Assignment to constant variable.,但我没有任何常量。。