我正在执行关闭示例,请检查下面的代码
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();