JavaScript关于闭包,匿名函数,this,对象等的一些理解

        闭包原本就是指所有的函数,但我们一般是指能够读取其他函数内部变量的函数,主要有两个作用:一个是可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。匿名函数不但可以省去命名的问题,同时可以提高程序的安全性,增加内聚。this指针的作用对象取决与其所在的运行环境,闭包是运行在Window全局的,所以闭包里面的this也是指向Window的。在JavaScript中一切都可以看见作对象,变量,函数等都可以用来创建对象。在JS中属性是公有的,但是有私有变量,使用var定义就是私有变量,同时也没有块级作用域的概念(注:for(var i=0;i<5;i++),i存在于整个函数),那怎么才能访问私有变量以及仿造块级作用域,跟其他语言一样的效果呢?闭包+匿名函数就派上用场了。块级作用域可以使用自我执行来解决(注:function(){}()),为什么?这里要引入作用域链和内存回收的概念了。JS 中对象之间的关系是从下往上的,也就是说如果子函数还在引用,那么以上的所有父函数都不会被回收,所以上面的for循环就可以放在函数闭包里面自我执行,完了后,i就被回收了,相当于块级变量。

        既然通过闭包等方式可以创建出跟其他语言一样的对象,那么也肯定可以达到一些特殊的模式设计效果了。比如,静态变量,单例模式。使用prototype使方法(如构造函数等)共享,从而使相应的变量变成静态变量。

        JS相对于C++而言更加面向对象(貌似是个废话),两个语言的所有用法不同之处就在于此,JS中的许多特性就是强制要使用者养成面向对象的概念,在语言层面很自然的能够设计出高内聚,低耦合的程序来。比较适合初学者,但C++更加自由化一些,要有一定的功力才能达到这样的效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值