Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中使用闭包时出现TypeError_Javascript_Jquery_Closures - Fatal编程技术网

在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是没有意义的。。。不知道我在想什么。@Veereshkopula
v
已经是“内部函数”,所以你只需调用它,因此
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