首页 新闻 会员 周边

javascript 闭包和其它面向对象语言中对象属性的封装,有什么区别

0
悬赏园豆:100 [已解决问题] 解决于 2015-12-07 09:24

  经常看到说关于javascript 闭包的问题,感到十分迷惑。 谁能为我真真揭开 javascript 的这个神秘的面纱。javascript 闭包和其它面向对象语言中对象属性的封装,有什么区别!

小码蚁·兴的主页 小码蚁·兴 | 菜鸟二级 | 园豆:321
提问于:2015-12-04 09:35
< >
分享
最佳答案
0

因为js没有 public private protect

所以才要用用闭包这种手段来实现 其他语言的封装特性

 

对于你的代码 后者 可以直接取到n、

f1.n

但是前者只能通过方法 

收获园豆:100
小眼睛老鼠 | 老鸟四级 |园豆:2731 | 2015-12-04 16:28
其他回答(3)
0

JavaScript中的闭包是访问了外部变量,会导致外部变量不能被垃圾回收。

其他编译类型的属性封装,都是编译器的检查规则,不存在跨作用域的问题。

幻天芒 | 园豆:37175 (高人七级) | 2015-12-04 10:29

变量不能被垃圾回收,这个优点还是缺点哦?
闭包具体的使用场景是什么哦?使用闭包的优点什么的,可以介绍一下吗?

支持(0) 反对(0) 小码蚁·兴 | 园豆:321 (菜鸟二级) | 2015-12-04 11:03

闭包中  

function f1(){

  var n = 1;

  function f2(){

    return n

  }

}

与 
var f1 = function(){};

f1.prototype = {

  n : 1,

  f2 : function(){

    return this.n;

  }

}
这两者 有机区别吗?

支持(0) 反对(0) 小码蚁·兴 | 园豆:321 (菜鸟二级) | 2015-12-04 11:16

@小码蚁·兴:初学者不用整天考虑这些问题。当你经历丰富了,这些自然就懂了

支持(0) 反对(0) 需要格局 | 园豆:2145 (老鸟四级) | 2015-12-04 11:28

哦,好吧,我还是先学习this 是什么东西,再出来吧!

支持(0) 反对(0) 小码蚁·兴 | 园豆:321 (菜鸟二级) | 2015-12-04 11:33

@小码蚁·兴: 有区别的,前者是无法改变n的值的,后者却可以通过f1.protorype.n = 2来修改值,这就是很大的区别了。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2015-12-04 13:26
0

一般的编程语言呢?一个函数或者一段过程,它只管输入和输出,至于处理过程它不管的(外面无法访问里面),因为在处理过程中使用过的材料(变量),用它就销毁了。

但是有些编程语言呢?它还关注处理的过程。外面 可以访问里面的变量。

需要格局 | 园豆:2145 (老鸟四级) | 2015-12-04 11:32
0

函数内部可以访问到外部变量叫做闭包。全局函数相对全局变量就是个闭包,闭包变量会一直存储于内存。一般来说都是用(function(){})();这种形式封装代码,像一些插件什么的。我三年了理解也不深,表达也表达不是很明白。

圣之贤者 | 园豆:202 (菜鸟二级) | 2015-12-08 18:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册