为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

鸿蒙传说 2018-12-06 19:25:44
  经常看到说关于javascript 闭包的问题,感到十分迷惑。 谁能为我真真揭开 javascript 的这个神秘的面纱。javascript 闭包和其它面向对象语言中对象属性的封装,有什么区别!
查看完整描述

9 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

因为js没有 public private protect

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

 

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

f1.n

但是前者只能通过方法 

查看完整回答
反对 回复 2018-12-24
?
森栏

TA贡献1810条经验 获得超5个赞

闭包中  

function f1(){

  var n = 1;

  function f2(){

    return n

  }

}

与 
var f1 = function(){};

f1.prototype = {

  n : 1,

  f2 : function(){

    return this.n;

  }

}
这两者 有机区别吗?

查看完整回答
反对 回复 2018-12-24
?
慕容森

TA贡献1853条经验 获得超18个赞

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

查看完整回答
反对 回复 2018-12-24
?
冉冉说

TA贡献1877条经验 获得超1个赞

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

查看完整回答
反对 回复 2018-12-24
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

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

查看完整回答
反对 回复 2018-12-24
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

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

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

查看完整回答
反对 回复 2018-12-24
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

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

查看完整回答
反对 回复 2018-12-24
  • 9 回答
  • 0 关注
  • 633 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号