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的引用,在该文件中,我们使用另一个引用变量来指向它。当我们使用另一个引用变量调用时,它不会像referencesum
那样更新其引用。下面的代码是解决这个问题的方法
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.,但我没有任何常量。。