javascript中的闭包问题
来源:互联网 发布:windows 8.1K 编辑:程序博客网 时间:2024/04/27 20:49
百度了一下“官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。相信很少有人能直接看懂这句话,因为他描述的太学术。我想用如何在Javascript中创建一个闭包来告诉你什么是闭包,因为跳过闭包的创建过程直接理解闭包的定义是非常困难的。
用这个集合的图可以比较轻松的理解
如果写一个函数来看会更直观
function
a(){
var
i=0;
function
b(){
alert(++i);
}
return
b;
}
var
c=a();
c();
这段代码有两个特点:
1、函数b嵌套在函数a内部;
2、函数a返回函数b。
这样在执行完var c=a( )后,变量c实际上是指向了函数b,再执行c( )后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b,就是说:
当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包
作用
简而言之,闭包的作用就是在a执行完并返回后,闭包使得Javascript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。这是对闭包作用的非常直白的描述,不专业也不严谨,但大概意思就是这样,理解闭包需要循序渐进的过程。
在上面的例子中,由于闭包的存在使得函数a返回后,a中的i始终存在,这样每次执行c(),i都是自加1后alert出i的值。
那 么我们来想象另一种情况,如果a返回的不是函数b,情况就完全不同了。因为a执行完后,b没有被返回给a的外界,只是被a所引用,而此时a也只会被b引 用,因此函数a和b互相引用但又不被外界打扰(被外界引用),函数a和b就会被GC回收 0 0
- javascript中的闭包问题
- javascript中的闭包问题
- 如何理解Javascript中的闭包问题
- JavaScript中的"闭包"
- javascript中的闭包
- JavaScript中的闭包
- javaScript中的闭包
- javascript中的闭包
- Javascript中的闭包
- JavaScript中的闭包
- javascript 中的闭包
- javascript中的闭包
- JavaScript中的闭包
- javascript中的闭包
- JavaScript中的闭包
- javascript中的闭包
- JavaScript中的闭包
- javascript中的闭包
- hibernate参数设置
- Qt-5.5.1 设置界面字体为微软雅黑
- 贪心算法
- 前台传过来的中文在数据库中搜不到结果的解决办法
- Git的错误error: Failed connect to github.com:443;解决办法
- javascript中的闭包问题
- jdk1.5、1.6、1.7新特性详细介绍(整理)
- 微信支付及支付宝支付开发指南
- 给定一行字符,逆序输出此行(空格.数字不输出)
- Linux常用命令之(一)
- CODEFORCES, 450E Jzzhu and Apples <筛素数>
- LeetCode:Contains Duplicate系列
- Android性能优化之常见的内存泄漏
- 统计学习方法笔记(二)