我正在执行闭包示例,请检查下面的代码
function Counter()
{
var count=0;
var counterIncrement=function()
{
count++;
console.log(count);
}
return counterIncrement;
}
var v=Counter();
v.counterIncrement();
错误:请解释
"message": "Uncaught TypeError: v.counterIncrement is not a function",
"filename": "https://stacksnippets.net/js",
"lineno": 26,
"colno": 3
最佳答案
更新:
这是OP在评论中要求的扩展答案。
所以OP问如果你里面有两个函数怎么办?你会怎么调用它?很简单,只需返回一个对象并将函数处理程序分配给每个属性即可。
示例:
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();
关于javascript - 在 javascript 中使用闭包时出现类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45071470/