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。

总结

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

 

你可能感兴趣的:(JavaScript)