Javascript 闭包何时回收?
定义
闭包是函数和声明该函数的词法环境的组合。
闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量。
范例
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
Javascript 闭包何时回收?的更多相关文章
- JavaScript学习总结——我所理解的JavaScript闭包
一.闭包(Closure) 1.1.什么是闭包? 理解闭包概念: a.闭包是指有权限访问另一个函数作用域的变量的函数,创建闭包的常见方式就是在一个函数内部创建另一个函数,也就是创建一个内部函数,创建一 ...
- JavaScript闭包(Closure)
JavaScript闭包(Closure) 本文收集了多本书里对JavaScript闭包(Closure)的解释,或许会对理解闭包有一定帮助. <你不知道的JavsScript> Java ...
- 理解JAVASCRIPT 闭包
最近去面试了一家企业,结果非常灰心丧气,于是周末给自己定了一个目标 学好一门,学精通一门.不求多,只求懂. 最近看到一个概念“闭包”. 什么是闭包呢? 简单一点就是:看得到多和看得到少的区别. 上面这 ...
- JavaScript 闭包系列一
一. 闭包的概念 闭包是有权访问另一个函数作用域中的变量的函数. 如下代码:根据变量作用域,函数outer中所有的局部变量对函数inner都是可见的.但是反过来不行,inner内部的局部变量对oute ...
- 【转】深入理解JavaScript闭包闭包(closure) (closure)
一.什么是闭包?"官方"的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.相信很少有人能直接看懂这句话,因为他描述 ...
- 理解闭包 js回收机制
为什么要有回收机制?why? 打个比方,我有一个内存卡,这个内存是8G的,我把文件,视频,音乐,都保存到了这个内存卡,随着我的储存的内容越来越多,这个内存卡已经保存不了了,如果我还想再把其他的文件保存 ...
- javascript 闭包(转)
一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量 ...
- JavaScript闭包(二)——作用
一.延迟调用 当在一段代码中使用 setTimeout 时,要将一个函数的引用作为它的第一个参数,而将以毫秒表示的时间值作为第二个参数. 但是,传递函数引用的同时无法为计划执行的函数提供参数.可以在代 ...
- JavaScript闭包(一)——实现
闭包的官方的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 通俗点的说法是: 从理论角度:所有的函数.因为它们都在创建的时候就将上层上下文 ...
随机推荐
- andriod studio连接SQLite
SQLite SQLite是一种嵌入式的数据库引擎,以文件的形式保存数据的,专门适用于资源有限的设备上进行适量的数据存储. 从本质上来看,SQLite的操作方式只是一种更为便捷的文件操作,当应用程序创 ...
- archlinux安装nvidia-1050ti闭源驱动教程,亲测
link:https://blog.csdn.net/u014025444/article/details/91454059
- HTML Entity
1.1 介绍 在编写HTML页面时,需要用到"<".">"."空格"等符号,直接输入这些符号时,会错误的把它们与标记混在一起,非 ...
- django部署后样式加载不出来解决方案
django部署后样式加载不出来 1.html文件去掉<!DOCTYPE html> 2. location /static { alias /home/static/; } 3.STAT ...
- Python常量类
class _const: class ConstError(TypeError): pass class ConstCaseError(ConstError): pass def __setattr ...
- 微信小程序不同机型的兼容布局解决
因为小程序是以微信为平台运行的,可以同时运行在android与ios的设备上,所以不可避免的会遇到布局适配问题,特别是在iphone5上,因为屏幕尺寸小的缘故,也是适配问题最多的机型,下面就简单介绍几 ...
- 关于Android8.0 静态注册广播 行为变更的说明。
Andorid 8.0 对广播的使用做了变更. 当广播接收器使用静态注册方式使用时,除了一些例外,这个接收器接收不到隐式广播. 注意这个“隐式”是重点. 看了网上几篇文章,对这个变更理解有误.错误的理 ...
- Python有堆栈/堆,如何管理内存?
Python有堆栈/堆,如何管理内存? - 代码日志 https://codeday.me/bug/20171016/86264.html
- Windows 操作系统 快捷键
窗口放大缩小: + ↑↓ 最小化窗口: ALT + Esc 关闭窗口: Alt + F4 搜索功能: + 直接输入搜索内容 打开文件管理器: + E 在文件管理器中切换: Tab
- Linux_CentOS 文件管理和目录管理
Linux 文件管理 1.创建文件 touch file1 2.删除文件 rm -rf file11 -r:递归的删除目录下面文件以及子目录下文件. -f:强制删除,忽略不存在的文件,从不给出提示 3 ...