Undefined不是一个函数 - JavaScript

时间:2014-05-27 20:14:14

标签: javascript

我这里有一个简单的问题。这是下面的代码

var num = 0;



var increment = function() {
    return function() { num++; };
};

increment();
increment();

然而,当我试图运行它时,它说“undefined不是一个函数”。怎么会?这个增量显然不是一个函数吗?

另外,当我写下typeof increment时,它会返回undefined。

我希望当这个increment()调用两次时,它会修改num,所以它变为2。

7 个答案:

答案 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++; };

但也许你有其他理由希望以更复杂的方式去做。