Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Undefined不是一个函数-JavaScript_Javascript - Fatal编程技术网

Undefined不是一个函数-JavaScript

Undefined不是一个函数-JavaScript,javascript,Javascript,我这里有一个简单的问题。下面是代码 var num=0; var increment=函数(){ 返回函数(){num++;}; }; 增量(); 增量(); 但是,当我试图运行它时,它会出错,因为未定义不是一个函数。怎么会?increment显然不是一种功能吗 另外,当我编写typeof increment时,它返回undefined 当两次调用increment()时,它应该修改num,并变为2。但是返回函数()返回什么呢?您应该只返回num var num = 0; var increm

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

var num=0;
var increment=函数(){
返回函数(){num++;};
};
增量();
增量();
但是,当我试图运行它时,它会出错,因为
未定义不是一个函数。怎么会?
increment
显然不是一种功能吗

另外,当我编写
typeof increment
时,它返回
undefined


当两次调用
increment()
时,它应该修改
num
,并变为2。

但是返回函数()返回什么呢?您应该只返回num

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

是,增量函数不增加变量;它返回一个内部函数,该函数将在调用时递增变量

如前所述,您必须调用调用增量函数的结果:

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


根据您的注释,如果要从函数返回函数,请调用
increment()
返回的函数:

或者,更适合:

var incrementer = increment();
incrementer(); //Call this each time you want to increment num

这不是一个函数。。。确切地函数“increment”返回一个函数,而不是递增的值。正确的方法应该是: var increment=function(){return num++;}


Phil

如果要将内部函数分配给
增量
,则需要执行外部函数:

increment()(); //results in num++
var increment = (function() {
    return function() { num++; };
}());
(这被称为an,简称IIFE。)当然,更简单的方法是:

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

但也许你还有其他原因想用更复杂的方式来做这件事。

我猜你想做这样的事情:

> var makeIncrement = function () { var num = 0; return function () { return num++ } }
undefined
> increment = makeIncrement()
function () { return num++ }
> increment()
0
> increment()
1

必须调用函数(
makeIncrement()
)才能返回内部函数,然后可以将其分配给变量。一旦分配了它,您就可以调用它,它将按照您的预期工作。

它在Chrome控制台中为我工作。(顺便说一句,为什么不简单地定义
var increment=function(){num++;}
?这段代码看起来不错,尽管从
increment()返回函数很奇怪。)
我特意将其设置为函数内部的函数,只是为了测试一个案例。使用这种形式,我如何使函数工作?我怀疑此代码会引发这样的错误。正如@TedHopp指出的,您在哪个环境下执行此操作?我想将其设置为函数内部的函数我想将其设置为函数内部的函数I想让它成为functionHi Tedd中的一个函数。我试过了,它仍然说undefined不是一个函数function@user122652-您使用什么环境来执行此操作?
increment
在我看来就像一个函数。它返回什么并不重要。@user122652没问题,很乐意提供帮助。顺便说一句,我刚刚编辑使用
var num
所以
num
变量对代码的其余部分不可见。这意味着您可以有几个
increment
函数,每个函数都有各自独立的计数器。@user122652如果您的问题得到解决,请不要忘了接受答案,并对任何您认为有用的答案进行投票。@user122652您可以投票选择尽可能多的答案u want.Upvoting表示您发现答案很有用。若要接受您最喜欢的答案,请单击答案旁边的勾选框。勾选框将变为绿色,表示答案已被接受。@user122652没问题:)