gpt4 book ai didi

javascript - 在 javascript 中使用闭包时出现类型错误

转载 作者:行者123 更新时间:2023-11-28 04:25:50 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com