分析javascript中的闭包
来源:互联网 发布:下载定时开关机软件 编辑:程序博客网 时间:2024/06/11 04:49
1.什么是闭包
1)官方解释
一个拥有多个变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
我的理解:所谓的闭包就是连接函数内部和函数外部的一座桥梁,使得在外部也能够访问到函数内部的变量。
2)闭包的特点
A:作为一个函数变量的一个引用,当函数返回时,其处于激活状态。
B:一个闭包就是当一个函数返回时,一个没有释放资源的栈区。
2.闭包的用途
A:读取函数内部变量
<span style="font-family:SimSun;font-size:18px;">function People(name) { var name ="张三"; return function () { alert(name); } } var Job = new People(); Job();</span>
解释:正如上述的代码所示,name是定义在People中的函数,是函数People中的局部变量,而我们在外部是无法访问到的,但是People函数返回了一个内部函数,而这个内部函数是对变量name的一个引用,这就形成了一个闭包,所以在外部也可以访问到People函数的内部变量(特点一);正如上述代码所示,如果name在函数People调用完后不能再访问的话,则将被释放,而在本例中却被另一个函数所返回,所以还会包含在栈中(特点二)。
B:保存变量始终在内存中
这也是闭包的不利处之所在地,因为闭包会使得函数中的变量保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页加载缓慢问题等,解决的方法就是在退出函数之前,来销毁不使用的局部变量。
3.思考题
1)例子1
<span style="font-family:SimSun;font-size:18px;">function Test1() { var a = 0; function Test2() { a++; alert(a); } } Test2();//是错误的,作用域在Test1,外部无法访问到</span>
2)修改后
<span style="font-family:SimSun;font-size:18px;">function Test1() { var a = 0; function Test2() { a++; alert(a); } return Test2; //修改操作如下 } var obj = Test1(); obj();//返回1 obj();//返回2 var obj2 = Test1(); obj2();//返回1 obj2();//返回2</span>
4.小结
以上就是对闭包的全部理解,简单的一句话:闭包就是搭建外部函数与内部函数的桥梁。
上述只是对闭包的一点点了解,有疑问之处,还请多多指正。
0 0
- 分析javascript中的闭包
- javascript中的闭包分析
- 简要分析JavaScript中的“闭包”
- javascript 闭包分析
- JavaScript中的"闭包"
- javascript中的闭包
- JavaScript中的闭包
- javaScript中的闭包
- javascript中的闭包
- Javascript中的闭包
- JavaScript中的闭包
- javascript 中的闭包
- javascript中的闭包
- JavaScript中的闭包
- javascript中的闭包
- JavaScript中的闭包
- javascript中的闭包
- JavaScript中的闭包
- 字符串替换 REPLACE,得到字符的ASCII码
- HBase编程实例
- 数据结构之---树(二)
- uva10201 - Adventures in Moving - Part IV(01背包)
- vs2010 combo box 添加data数据
- 分析javascript中的闭包
- 关于单链表函数操作中return head的意义
- Android菜鸟学习笔记之---用handler更新UI
- hive 配置文件以及join中null值的处理
- 使用common-fileupload实现文件上传功能
- JAVA图形化编程
- 选夫婿1
- cocos2d-js-v3.0-rc2:js绑定调用c++函数 1
- matlab实现复杂网络中节点重要度评估的节点收缩方法