经常看到说关于javascript 闭包的问题,感到十分迷惑。 谁能为我真真揭开 javascript 的这个神秘的面纱。javascript 闭包和其它面向对象语言中对象属性的封装,有什么区别!
因为js没有 public private protect
所以才要用用闭包这种手段来实现 其他语言的封装特性
对于你的代码 后者 可以直接取到n、
f1.n
但是前者只能通过方法
JavaScript中的闭包是访问了外部变量,会导致外部变量不能被垃圾回收。
其他编译类型的属性封装,都是编译器的检查规则,不存在跨作用域的问题。
变量不能被垃圾回收,这个优点还是缺点哦?
闭包具体的使用场景是什么哦?使用闭包的优点什么的,可以介绍一下吗?
闭包中
function f1(){
var n = 1;
function f2(){
return n
}
}
与
var f1 = function(){};
f1.prototype = {
n : 1,
f2 : function(){
return this.n;
}
}
这两者 有机区别吗?
@小码蚁·兴:初学者不用整天考虑这些问题。当你经历丰富了,这些自然就懂了
哦,好吧,我还是先学习this 是什么东西,再出来吧!
@小码蚁·兴: 有区别的,前者是无法改变n的值的,后者却可以通过f1.protorype.n = 2来修改值,这就是很大的区别了。
一般的编程语言呢?一个函数或者一段过程,它只管输入和输出,至于处理过程它不管的(外面无法访问里面),因为在处理过程中使用过的材料(变量),用它就销毁了。
但是有些编程语言呢?它还关注处理的过程。外面 可以访问里面的变量。
函数内部可以访问到外部变量叫做闭包。全局函数相对全局变量就是个闭包,闭包变量会一直存储于内存。一般来说都是用(function(){})();这种形式封装代码,像一些插件什么的。我三年了理解也不深,表达也表达不是很明白。