js中的闭包是什么,有什么用,有什么缺陷

闭包是什么

闭包是可以访问另一个函数作用域中变量的函数。简单地说就是定义在一个函数内部的另一个子函数。

闭包有什么用 

闭包可以访问到函数内部的变量;从而实现封装。

var Person = function(){  
    var name = "jax"; //变量作用域为函数内部,外部无法访问 
    //返回两个闭包函数 
    return {  
       getName : function(){  
           return name;  
       },  
       setName : function(newName){  
           name = newName;  
       }  
    }  
}();  
   
Person.name;//直接访问,结果为undefined  
Person.getName();  //结果为 jax
Person.setName("jaxhu");   //通过闭包设置person函数内部的变量
Person.getName();   //结果为 jaxhu

通过这个的封装可以实现js中原本没有的类的概念。

var jax1= Person();  
jax1.setName("jax1");  
john.getName();  //结果为jax1
   
var jax2= Person();  
jax2.setName("jax2");  
john.getName();  //结果为 jax2

 

闭包可以使访问到的那些变量一直保存在内存当中, 实现缓存功能。

 闭包有什么缺陷

如果大量因为闭包引用的变量存留在内存中,对于内存的消耗会很大,导致影响产品的性能,遇到这样的情况我们可以在退出函数之前,将不使用的局部变量全部删除。

闭包内this的指向

首先我们要了解,js中this的指向是由它所在函数被调用时的上下文决定的,而不是由它所在函数定义的上下文决定的。

js中this的指向和执行环境和作用域链密不可分,此文不做详述,我们只需要知道,通常情况下闭包中的this都是指向window。

总结

闭包的使用要根据业务场景和具体逻辑来使用。关于闭包中引用的变量会存留在内存中这一点,它既可以是影响你产品性能的一个被忽略的要素,也可以被利用起来实现一些功能。具体情况具体分析,也配合相应的解决方法。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值