我正在执行关闭示例,请检查下面的代码



function Counter()
{
    var count=0;
    var counterIncrement=function()
    {
        count++;
        console.log(count);
    }
    return counterIncrement;

}

var v=Counter();
v.counterIncrement();





错误:请说明


  “ message”:“未捕获的TypeError:v.counterIncrement不是函数”,
  “ filename”:“ https://stacksnippets.net/js”,
  “ lineno”:26,
  “ colno”:3

最佳答案

更新:

这是OP在评论中要求的扩展答案。

因此,OP询问其中是否包含2个功能。你怎么称呼它?很简单,只需返回一个对象并将每个函数处理程序分配给一个属性即可。

例:



function Counter()
{
    var count=0;
    var counterIncrement = function()
    {
        count++;
        console.log(count);
    }

    var increment = function(value) {
        count += value;
        console.log(count);
    }

    // return as an object with reference to the functions
    return {
        counterIncrement : counterIncrement,
        increment : increment
    }
}

var v= Counter();
v.counterIncrement();
v.increment(100);





----上一个答案------

当执行var v=Counter();时,实际上是在执行函数Counter()并将其返回值分配给v

在这种情况下,Counter()将返回对函数counterIncrement的引用。

因此,变量v现在包含一个名为counterIncrement()的可调用函数。当您执行v.counterIncrement()时,您的JavaScript引擎会将代码视为counterIncrement.counterIncrement(),该代码将解析为未定义的属性。这将产生您所看到的错误消息。

仅调用v()就足够了。



function Counter()
{
    var count=0;
    var counterIncrement=function()
    {
        count++;
        console.log(count);
    }
    return counterIncrement;

}

var v= Counter();
v();

08-17 07:45