定义

闭包是函数和声明该函数的词法环境的组合。
闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量。

范例

function fnTest(_i) {var i = _i;function fnAdd() {console.log(i++);}return fnAdd;
}
var fun = fnTest(100);
fun(); //100,i常驻内存
fun(); //101,i常驻内存
fun(); //102,i常驻内存
fun=null; // i被GC回收

javascript的垃圾回收原理

1. 在javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收;
2. 如果两个对象互相引用,但不被第三者引用,那么这两个互相引用的对象会被回收。

闭包优点

1. 可以将一个变量长期驻留在内存中
2. 模拟私有方法,避免受到全局变量的污染
在面向对象编程语言中,比如 Java,支持将方法声明为私有的,即它们只能被同一个类中的其它方法所调用。
而 JavaScript没有这种原生支持,但我们可以使用闭包来模拟私有方法。私有方法不仅仅有利于限制对代码的访问:还提供了管理全局命名空间的强大能力,避免非核心的方法弄乱了代码的公共接口部分。

闭包缺点

常驻内存,会增大内存使用量,使用不当容易造成内存泄露。

Javascript 闭包何时回收?

将不再使用的闭包实例手工删除

参考资料

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures
https://www.cnblogs.com/wangyingblog/p/5569745.html

转载于:https://www.cnblogs.com/jinzesudawei/p/8526197.html

Javascript 闭包何时回收?相关推荐

  1. JavaScript学习总结(十六)——Javascript闭包(Closure)

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现.很早就接触过闭包这个概念了,但是一直糊里糊涂的,没有能够弄明白JavaScript的闭包到底是什 ...

  2. 让你分分钟理解 JavaScript 闭包

    原文:https://www.cnblogs.com/onepixel/p/5062456.html 让你分分钟理解 JavaScript 闭包 闭包,是 Javascript 比较重要的一个概念,对 ...

  3. [转载]深入理解JavaScript闭包(closure)

    最近在网上查阅了不少Javascript闭包(closure)相关的资料,写的大多是非常的学术和专业.对于初学者来说别说理解闭包了,就连文字叙述都很难看懂.撰写此文的目的就是用最通俗的文字揭开Java ...

  4. 深入理解Javascript闭包(一)

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用于.变量作用域包括 ...

  5. 关于Javascript闭包的理解

    一.什么是闭包? "官方"的解释是:所谓"闭包",指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 相 ...

  6. javascript的垃圾回收机制指的是什么?

    javascript的垃圾回收机制指的是什么?你了解吗?本文小编给大家详细解读一下! 定义:指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束. 像 C 这样的编程语言,具有低级内存管理原语 ...

  7. Javascript闭包与作用域

    1.Javascript的作用域是函数作用域而非块级作用域 //C语言 #include void main() {int i=2;i--;if(i){int j=3;}printf("%d ...

  8. JavaScript闭包的底层运行机制

    转自:http://blog.leapoahead.com/2015/09/15/js-closure/ 我研究JavaScript闭包(closure)已经有一段时间了.我之前只是学会了如何使用它们 ...

  9. Javascript闭包概念剖析

    某种情况下,函数调用依然持有对其原始定义的作用域的引用,这个引用就叫做闭包. 1 function foo(){ 2 var a = 2; 3 function bar(){ 4 console.lo ...

最新文章

  1. 零基础学编程学java还是python-学编程选Python还是Java?就业发展哪个好?
  2. Django使用中常见的错误
  3. 【转】匈牙利命名法(Hungarian Notation)
  4. SQLite 分离数据库(http://www.w3cschool.cc/sqlite/sqlite-detach-database.html)
  5. 计算机桌面有黑边怎么调整,电脑屏幕旁边有黑色框如何恢复_电脑两边黑边怎么还原-win7之家...
  6. [转载] Linux进程基础
  7. ASV2011新功能逐个数
  8. Java 二十五载,正在 Kotlin 化!
  9. linux暂时不能域名解析,Kali Linux中暂时不能解析域名
  10. POJ 1149 PIGS(最大流)dinic模板注释
  11. switch交换的vlan三种模式详解
  12. Android中各个国家语言对应的系统资源文件夹名称及对应简写
  13. STM32F407VET6+cubemx+FSMC+ST7789
  14. 清除计算机策略,怎么删除组策略
  15. 父亲节!程序员给父亲一份代码信
  16. 开机后黑屏看不到桌面_开机不显示桌面黑屏怎么办_win10开机黑屏啥也没有的解决办法...
  17. JAVA:实现ClosestPair最近对算法(附完整源码)
  18. 助力低碳出行 | 基于ACM32 MCU的电动滑板车方案
  19. 打开ftp文件服务器,打开ftp服务器文件管理
  20. 计算机上安装了更新ie版本,电脑XP系统安装不了ie提示“安装了更新的Internet Explorer版本”的解决方法...

热门文章

  1. OpenStack 的Nova组件详解
  2. URL不能过长,否则summit方法提交失败
  3. 【SQL*PLUS】Copy Command
  4. 黑客SQL服务器入侵实战演习
  5. TPAMI 2021 华为诺亚悉尼大学陶大程团队提出多功能卷积,助力轻量级网络
  6. 火爆全网的迁移学习简明手册全面更新,重磅出版上市!
  7. 【推荐】本周值得关注的将开源论文,包含分类、分割、人脸、目标检测、ReID等...
  8. 第四届UG2研讨会和竞赛:弥合计算成像与视觉识别之间的鸿沟
  9. Scale Match:国科大提出小目标检测的尺度匹配方法,用于预训练数据集处理
  10. NIHCC发布迄今世界最大的CT医学影像数据集(附下载)