我这里有一个简单的问题。这是下面的代码
var num = 0;
var increment = function() {
return function() { num++; };
};
increment();
increment();
然而,当我试图运行它时,它说“undefined不是一个函数”。怎么会?这个增量显然不是一个函数吗?
另外,当我写下typeof increment时,它会返回undefined。
我希望当这个increment()调用两次时,它会修改num,所以它变为2。
答案 0 :(得分:2)
我猜你想做这样的事情:
> var makeIncrement = function () { var num = 0; return function () { return num++ } }
undefined
> increment = makeIncrement()
function () { return num++ }
> increment()
0
> increment()
1
必须调用函数(makeIncrement()
)才能返回内部函数,然后可以将其赋值给变量。分配完成后,您可以调用它,它将按预期工作。
答案 1 :(得分:0)
var num = 0;
var increment = function() {
num++;
};
increment();
increment();
答案 2 :(得分:0)
但是你用return函数返回什么()?你应该只返回num。
var num = 0;
var increment = function() {
num++
return num;
};
var something = 0;
something = increment();
something = increment();
alert(something);
答案 3 :(得分:0)
是的,增量函数不会增加变量;它返回一个内部函数,在调用时递增变量。
如上所述,您必须调用调用增量函数的结果:
increment()(); //results in num++
OR
var incrementFunction = increment(); //does not increment
incrementFunction(); //num++
答案 4 :(得分:0)
根据您的评论,如果您想从函数中返回函数,请调用increment()
返回的函数:
var num = 0;
var increment = function() {
return function() { num++; };
};
increment()();
increment()();
或者,更合适:
var incrementer = increment();
incrementer(); //Call this each time you want to increment num
答案 5 :(得分:0)
它不是一个功能......确切地说。你的功能"增量"返回一个函数,而不是递增的值。正确的方法应该是: var increment = function(){return num ++; };
菲尔
答案 6 :(得分:-1)
如果要将increment
分配给内部函数,则需要执行外部函数:
var increment = (function() {
return function() { num++; };
}());
(这简称为immediately-invoked function expression或IIFE。)当然,更简单的方法是:
var increment = function() { num++; };
但也许你有其他理由希望以更复杂的方式去做。