提问一个关于闭包的问题
查看了很多关于闭包的问题。
大家都说闭包主要应用于两个场合
1、获得函数的内部变量,并且对内部变量起到保护作用是,用闭包
2、保存某个函数内部私有变量的数值不被内存回收所使用。
目前基本的闭包原理和上述两点理解清楚。但是我发现不使用闭包好像也可以达到上述两点,上两个例子给大家看看。
1、使用闭包
2、不使用闭包达到同样的效果。借助this函数
关于上述的代码有几个疑问:
1、上述第一种情况在诸多资料和文章中指明是闭包形式。那么第二种情况算什么呢?有点类似C#或者java中的类和对象,以及public 方法。请问第二种算不算闭包呢?
2、如果不是闭包,第二种情况是否也可以达到和第一种一样的效果呢?在实际使用中,那种会更好呢?那种会更舒服,更常用呢。
大家都说闭包主要应用于两个场合
1、获得函数的内部变量,并且对内部变量起到保护作用是,用闭包
2、保存某个函数内部私有变量的数值不被内存回收所使用。
目前基本的闭包原理和上述两点理解清楚。但是我发现不使用闭包好像也可以达到上述两点,上两个例子给大家看看。
1、使用闭包
function Test1(){
var i = 0;
return{
f1:function(){
i++;
return i;
},
f2:function(){
i--;
return i;
}
}
}
var a1 = Test1();
a1.f1(); //=>1
a1.f1(); //=>2
a1.f2(); //=>1
a1.f1(); //=>2
var a2 = Test1();
a2.f1(); //=>1
a2.f1(); //=>2
2、不使用闭包达到同样的效果。借助this函数
var Test2 = function(){
var i=0;
this.f1= function(){
i++;
return i;
}
this.f2 = function(){
i--;
return i;
}
}
var b1 = new Test2();
b1.f1(); //=>1
b1.f1(); //=>2;
b1.f2(); //=>1;
b1.f1(); //=>2;
var b2 = new Test2();
b2.f1(); //=>1
b2.f1(); //=>2
关于上述的代码有几个疑问:
1、上述第一种情况在诸多资料和文章中指明是闭包形式。那么第二种情况算什么呢?有点类似C#或者java中的类和对象,以及public 方法。请问第二种算不算闭包呢?
2、如果不是闭包,第二种情况是否也可以达到和第一种一样的效果呢?在实际使用中,那种会更好呢?那种会更舒服,更常用呢。
...全文
相关推荐
深入理解Go语言中的闭包
Go函数是可以闭包的。闭包是一个函数值,他来自函数体外部的变量引用。 下面这篇文章通过一个demo来进行深入的介绍了Go语言中闭包的相关资料,文中介绍的非常详细,需要的朋友可以参考下。
JS闭包的几种常见形式实例详解
本文通过实例代码给大家详细介绍了js闭包的几种常见形式,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友参考下
C语言实现三种闭包算法(传递,自反,对称闭包)
C语言实现三种闭包算法,能够实现传递,自反,对称闭包
解决js函数闭包内存泄露问题的办法
本文通过举例,由浅入深的讲解了解决js函数闭包内存泄露问题的办法,分享给大家供大家参考,具体内容如下 原始代码: function Cars(){ this.name = "Benz"; this.color = ["white","black"]; } Cars.prototype.sayColor = function(){ var outer = this; return function(){ return outer.color }; }; var instance = new Cars(); console.log(instance.sayColor(
浅谈js 闭包引起的内存泄露问题
主要介绍了浅谈js 闭包引起的内存泄露问题的相关资料,需要的朋友可以参考下



