函数闭包解释
来源:互联网 发布:照片编辑美化软件 编辑:程序博客网 时间:2024/06/05 09:23
简单来说,闭包就是父标签能运用子标签的值,闭包里面的变量会保存在内存中,不会被垃圾回收机制回收,但是由于闭包占用的内存比较大,可能会造成网页的性能和在ie中内存泄漏问题,所以一般都不能随意使用闭包,如果要使用那就在结束函数时清掉不使用的闭包变量;下面我们通过一些例子来说明什么是闭包;
Js代码
var n=999;
function f1(){
alert(n);
}
f1(); // 999
另一方面,在函数外部自然无法读取函数内的局部变量。
Js代码
function f1(){
var n=999;
}
alert(n); // error
这里有一个地方需要注意,函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量!
Js代码
function f1(){
n=999;
}
f1();
alert(n); // 999
二、如何从外部读取局部变量?
出于种种原因,我们有时候需要得到函数内的局部变量。但是,前面已经说过了,正常情况下,这是办不到的,只有通过变通方法才能实现。
那就是在函数的内部,再定义一个函数。
Js代码
function f1(){
n=999;
function f2(){
alert(n); // 999
}
}
在上面的代码中,函数f2就被包括在函数f1内部,这时f1内部的所有局部变量,对f2都是可见的。但是反过来就不行,f2内部的局部变量,对f1 就是不可见的。这就是Javascript语言特有的“链式作用域”结构(chain scope),
子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。
既然f2可以读取f1中的局部变量,那么只要把f2作为返回值,我们不就可以在f1外部读取它的内部变量了吗!
Js代码
function f1(){
n=999;
function f2(){
alert(n); //读取fi()的变量
}
return f2; //值返回给fi();
}
var result=f1();
result(); // 999
三、闭包的概念
上一节代码中的f2函数,就是闭包。
各种专业文献上的“闭包”(closure)定义非常抽象,很难看懂。我的理解是,闭包就是能够读取其他函数内部变量的函数。
由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。
所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
闭包的作用就是外部的函数可以调用内部函数的变量,闭包里面的变量会保存在内存中- 函数闭包解释
- 关于JavaScript函数闭包的简单解释
- python闭包解释
- js闭包解释
- javascript闭包 通俗解释
- 闭包最好的解释
- Javascript闭包官方解释
- Python学习笔记之函数作为返回值、闭包的解释
- Python学习笔记之函数作为返回值、闭包的解释
- 闭包 ---- 《JavaScript高级程序设计》中的解释
- 如何优雅的解释什么是闭包
- js闭包的详细解释
- JS闭包的形象解释
- 函数和函数闭包
- AS3函数闭包
- 记忆函数+闭包
- return闭包函数
- return闭包函数
- Redis-Java中使用Jedis进行操作
- 补7/1
- 正则表达式总结及常规的正则表达式校验
- B. Crossword solving
- eclipse添加本地xsd
- 函数闭包解释
- freopen函数在竞赛中的使用
- springmvc前台get方式传值异常 Name for argument type not available
- Visual Studio:error MSB8020 (同时安装vs2012和vs2013)
- redis常用命令建议
- Annotation使用小结
- 落单的数 III-LintCode
- A. I'm bored with life
- 如何打包一个项目文件