首先要知道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. 因为函数外部可以访问函数内部的变量,导致变量和内部的函数引用关系一直存在,内存不能销毁,会一直占用,使用量较大时会导致内存溢出

原文地址:http://www.cnblogs.com/Jundd/p/16815099.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性