在javascript中使用闭包时出现TypeError
我正在执行闭包示例,请检查下面的代码在javascript中使用闭包时出现TypeError,javascript,jquery,closures,Javascript,Jquery,Closures,我正在执行闭包示例,请检查下面的代码 函数计数器() { var计数=0; var counterIncrement=函数() { 计数++; 控制台日志(计数); } 回报递增; } var v=计数器(); v、 反增量() 你想怎么回答就怎么回答 var counter = (function() { var count = 0; return { counterIncrement: function() { count++; console.log(count
函数计数器()
{
var计数=0;
var counterIncrement=函数()
{
计数++;
控制台日志(计数);
}
回报递增;
}
var v=计数器();
v、 反增量()代码>
你想怎么回答就怎么回答
var counter = (function() {
var count = 0;
return {
counterIncrement: function() {
count++;
console.log(count);
},
};
})();
你想怎么回答就怎么回答
var counter = (function() {
var count = 0;
return {
counterIncrement: function() {
count++;
console.log(count);
},
};
})();
试着这样做:
var计数器=(函数(){
var计数=0;
函数countval(val){
计数+=val;
}
返回{
反增量:函数(){
countval(1);
},
反减量:函数(){
countval(-1);
},
值:函数(){
返回计数;
}
};
})();
console.log(counter.value());
counter.counterIncrement();
console.log(counter.value());
计数器。计数器减量();
console.log(counter.value())代码>像这样尝试:
var计数器=(函数(){
var计数=0;
函数countval(val){
计数+=val;
}
返回{
反增量:函数(){
countval(1);
},
反减量:函数(){
countval(-1);
},
值:函数(){
返回计数;
}
};
})();
console.log(counter.value());
counter.counterIncrement();
console.log(counter.value());
计数器。计数器减量();
console.log(counter.value())代码>更新:
这是OP在评论中要求的扩展答案
所以OP问如果你有两个函数在里面会怎么样。你怎么称呼它?很简单,只需返回一个对象并将函数处理程序分配给每个属性
示例:
函数计数器()
{
var计数=0;
var counterIncrement=函数()
{
计数++;
控制台日志(计数);
}
var增量=函数(值){
计数+=数值;
控制台日志(计数);
}
//作为引用函数的对象返回
返回{
反增量:反增量,
增量:增量
}
}
var v=计数器();
v、 反增量();
v、 增量(100)代码>更新:
这是OP在评论中要求的扩展答案
所以OP问如果你有两个函数在里面会怎么样。你怎么称呼它?很简单,只需返回一个对象并将函数处理程序分配给每个属性
示例:
函数计数器()
{
var计数=0;
var counterIncrement=函数()
{
计数++;
控制台日志(计数);
}
var增量=函数(值){
计数+=数值;
控制台日志(计数);
}
//作为引用函数的对象返回
返回{
反增量:反增量,
增量:增量
}
}
var v=计数器();
v、 反增量();
v、 增量(100)
您可以稍微修改代码以创建计数器的对象,然后可以访问类似myObject.counterIncrement()的函数
您可以稍微修改代码以创建计数器的对象
,然后可以访问类似myObject.counterIncrement()的函数
它应该是封闭的!您应该使用v()
而不是v.counterIncrement()
v.counterIncrement()没有意义。请参阅此-计数器
返回函数。它不会返回一个名为counterIncrement
的属性的对象。您可以调用v()代码>,但是v.counterIncrement
是未定义的
。可能重复的应该是闭包!您应该使用v()
而不是v.counterIncrement()
v.counterIncrement()没有意义。请参阅此-计数器
返回函数。它不会返回一个名为counterIncrement
的属性的对象。您可以调用v()
,但是v.counterIncrement
是未定义的
。可能重复尝试使其变得更简单。我也想过给出最小值,但他们已经给出了答案。但是我想调用Counter()的内部函数,即counterIncrement,因为假设我有两个函数,当调用v()时//它将正确执行两个函数如果你想使用两个函数,你可以添加另一个函数作为回报。。我将更新我的答案查看我的第二个函数counterDecrement
,我调用了类似counter.counterDecrement()
并从counter.value()
@Veeresh KoppulaTry获取值,使其变得不那么复杂。我也曾想过给出最小值,但他们已经给出了答案。但我想调用counter()的内部函数,即counterIncrement,假设我有两个函数,当调用v()时//它将正确执行两个函数如果你想使用两个函数,你可以添加另一个函数作为回报。。我将更新我的答案查看我的第二个函数counterDecrement
,我调用了类似counter.counterDecrement()
并从counter.value()获取值
@Veeresh koppula但我想调用counter()的内部函数i,e counter increment,假设我有两个函数,当调用v()时//它将执行两个函数right@Bergi你说得有道理。把它初始化为50是没有意义的。。。不知道我在想什么。@Veereshkopulav
已经是“内部函数”,所以你只需调用它,因此v()
谢谢你的回答,我的问题是:如果我在1)counterIncrement(),2 increment()中有两个函数,那么如何更接近这两个函数请解释我是reffer-非常感谢你,请解释//return作为一个对象引用函数return{counterIncrement:counterIncrement,increment:increment}为什么你在引用时不执行它,请参考这个视频,但我想调用Counter()i的内部函数,假设我有两个函数,当调用
function Counter()
{
var count=0;
this.counterIncrement = function() //used 'this' for create an object method which can access outside
{
count++;
console.log(count);
}
//return counterIncrement; //no need to return this method,
}
var v = new Counter();//used 'new' keyword to create an object of 'counter'
v.counterIncrement();//access ojbect method.
v.counterIncrement();//out put 2
v.counterIncrement();//out put 3