js中闭包的一些理解
来源:互联网 发布:药品数据库 编辑:程序博客网 时间:2024/06/06 01:05
最近在学js,遇到关于闭包的使用,查阅一些资料结合写的一些测试,下面是一些自己的理解!!!
一. 闭包的概念是比较抽象的,先从闭包的用途说起
1.读取函数内部的变量。
这点很好理解,在js中函数内部的变量定义通常都是使用var定义成局部变量,不推荐大量使用全局变量。那么这时,想要在函数体A外读取A里的变量,就变 得困难,因为根据js的GC,函数A执行完后就会被回收,因此里面的变量也就无法读取。这时候,使用闭包,就能解决这样的问题。举个例子:这样便实现了在 函数外读取A里的变量 。
function A(){var me="I am a temp";this.dealTemp=function(){return me;}}var a=new A();<span style="white-space:pre"></span>alert(a.dealTemp());
2.让函数里的变量保存在内存中。
这个也不难理解,只要在外部调用A里面的dealTemp的方法,me这个变量就会一直在内存当中,举个例子就很好理解了。
function wai(){<span style="white-space:pre"></span>var mk=0;this.li=function(){<span style="white-space:pre"></span>return mk++;}}var mm=new wai();alert(mm.li());//输出的结果是0;alert(mm.li());//输出的结果是1 这说明mk这个变量一直在内存当中
小结:归结起来闭包做了3件事:
1.保护了函数内部的变量安全
2.在内存中维持一个变量
3.可以在函数内部建立私有的属性和方法(只能通过内部的方法来访问变量)
基于这3点在js的开发中就能解决很多细节和变量作用域带来的许多问题。
二. js垃圾回收机制
1.当一个对象不再被引用的时候,这个对象就会被GC回收。
2.如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。
再回过头看看第一个例子A和dealTemp相互引用,但是dealTemp又在A外被引用,这就解释了为毛A执行完后,没有被回收。
未完待续。。。。。
0 0
- js中闭包的一些理解
- js 的一些理解
- js 一些基础的理解
- 关于js with语句的一些理解
- 关于js闭包的一些理解
- 对js cookie的一些理解
- 对js事件绑定的一些理解
- 关于JS函数的一些基本理解
- JS中闭包的理解
- js中闭包的理解
- 深入理解js的prototype以及prototype的一些应用
- 对浏览器内核 | DOM | HTML | XML | JS的一些理解
- 初步接触angular.js---一些基本概念的理解
- 关于JS中Apply和Call的一些理解
- 关于Js OOP编程 创建对象的一些理解。
- js事件绑定,事件流,事件代理的一些理解
- 关于JS中作用域的一些理解
- js中闭包的理解一
- HTML 窗口分帧技术
- 用java对文件进行分割与合并
- MYSQL笔记1安装
- 记录下org指令是干啥的 :D
- #include<> 和#include“”的区别
- js中闭包的一些理解
- 基础概率之计算机运算法则
- php socket通信(tcp/udp)
- POJ3229
- [华为机试练习题]26.铁路栈问题
- TCP header
- Oracle高级编程
- JS常见异常类型以及捕获异常
- 说说iOS与内存管理(上)