什么是闭包?闭包详解

    首先要知道JavaScript是使用 垃圾回收的语言 ,它会每隔一段时间就会释放内存进行闲置资源回收。像函数中的局部变量,函数执行时在内部使用了变量,栈内存会分配空间以保存相应的值。在函数使用结束后,这个局部变量就不需要了,占用的内存就会被释放。

那我们若是想要使这个变量不被清理,一直处于被使用中,那就得让他一直被引用,那么我们可以在一个函数里面嵌入一个函数,小函数里面引用大函数里的变量,并把这个函数返回到全局中,此刻我们便可让它不被清理并在全局中使用它了

放代码:

 1   function  big(){ //  大函数 
 2       var  savevar = 10; //  数据 
 3       function  little(){ //  小函数 
 4           return  savevar; //引用大函数的数据  ,并把数据返回出去 
 5   }  6       return  little; //  把小函数返回出去 
 7   }  8   var  deal = big(); //  调用大函数,返回出来小函数 
 9  console.log(deal);  //  返回的是little()这个小函数函数,如果要访问到num就需要调用这个函数 
 10   var  money = deal();  //  调用小函数,返回出来小函数里操作的值 
 11  console.log(money)  //  10,输出 

那平常使用闭包有什么好处呢?

优点:

  1. 作用域空间不销毁,所以变量也不会被销毁, 增加了变量的声明周期
  2. 在函数外部可以访问函数内部的变量
  3. 护私有变量,将变量定义在函数内,不会污染全局

缺点:

  1. 因为函数外部可以访问函数内部的变量,导致变量和内部的函数引用关系一直存在,内存不能销毁,会一直占用,使用量较大时会导致 内存溢出

 

 

详细见另外一篇《函数自调用与闭包》

标签: Javascript

添加新评论