js闭包
来源:互联网 发布:js注释 提示 编辑:程序博客网 时间:2024/06/10 11:07
之所以有闭包这个概念,其实是因为变量作用域的问题。我们都知道变量的作用域分为全局作用域和局部作用域。全局变量可以在函数内部读取,在外部却不可以读取函数内部的局部变量。然而出于各种原因,有时候我们需要读取函数内的局部变量。一般情况下是不能这样做的,我们可以取巧,就是在函数内部再定义一个函数,返回变量的值:
function f1(){ var n=999; function f2(){ return n; // 999 }return f2;
return f2;result = f1();result(); // 999
这样就能在外部读取函数内的变量了。所有具有链式作用域的语言都有闭包这个概念。如果不用想太复杂的话,可以简单的把闭包想象成函数内部的函数,就是把函数外部和内部链接起来的桥梁。
闭包的作用主要有两个,第一个就是读取内部变量,第二个就是把变量的值储存在内存中。
我们都知道如果定义一个函数,每次创建一个实例对象时,由于有垃圾回收机制,都会把函数内变量的值清除,每次都会对对象进行初始化。但是如果使用闭包,例如:
function f1(){ var n=999; nAdd=function(){n+=1} function f2(){ alert(n); } return f2; } var result=f1(); result(); // 999 nAdd(); result(); // 1000这里运行了两次,可以看到n的值变成了1000,没有被清除。这是因为我们把f1赋值给了全局变量result,而f1就是f2的父函数,所以f2就一直存在于内存中,因此它的父函数f1也就存在内存中,局部变量n就不会在函数调用后被垃圾回收机制清除。
要注意在使用闭包的时候尽量不要使用循环语句,这会造成一些错误。
阅读全文
0 0
- js闭包示例
- JS 闭包 计数器
- js闭包
- js 闭包
- js闭包
- js闭包
- js闭包
- js 闭包
- js 闭包
- js闭包
- js闭包
- (function (){})(); JS 闭包
- JS 闭包应用
- js闭包
- JS闭包
- JS 闭包随笔
- js闭包
- js 闭包
- python:字符串转换成字节的三种方式
- AJAX和JSON
- ubuntu 配置 jdk
- 50. Pow(x, n)
- fedora关闭,开启防火墙
- js闭包
- servlet的转发(request.getRequestDispatcher().forward())
- Linux fcntl函数详解
- Java配置类获取properties文件
- CUDA学习笔记09: 深入理解CUDA的Warp
- 动态代理及反射在工厂模式上的应用
- dlib-android编译
- 希尔排序
- table表格