文章标题
来源:互联网 发布:p2p无线监控软件 编辑:程序博客网 时间:2024/06/11 04:48
闭包
1.什么是闭包?
JS中闭包就是函数“—–>原理就是作用域,上级的作用域不能访问下级的作用域..
2.闭包要解决什么问题?
上级的作用域能间接访问下级的作用域.
function f1(){ var n=999; nAdd=function(){n+=1} function f2(){ alert(n); } return f2; } var result=f1(); result(); // 999 nAdd(); result(); // 1000
在这段代码中,result实际上就是闭包f2函数。它一共运行了两次,第一次的值是999,第二次的值是1000。这证明了,函数f1中的局部变量n一直保存在内存中,并没有在f1调用后被自动清除。
为什么会这样呢?原因就在于f1是f2的父函数,而f2被赋给了一个全局变量,这导致f2始终在内存中,而f2的存在依赖于f1,因此f1也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收。
这段代码中另一个值得注意的地方,就是“nAdd=function(){n+=1}”这一行,首先在nAdd前面没有使用var关键字,因此 nAdd是一个全局变量,而不是局部变量。其次,nAdd的值是一个匿名函数(anonymous function),而这个
匿名函数本身也是一个闭包,所以nAdd相当于是一个setter,可以在函数外部对函数内部的局部变量进行操作。
0 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- C++起航篇——bool类型,输入输出,命名空间
- 友盟社会化分享微信登录签名错误
- 如何改变文件属性与权限
- 《属灵操练礼赞》读后感
- thinkphp5,tpshop5下的数据库查询构造器的思考
- 文章标题
- 使用JsonView来格式化json字符串
- C++实现学生通讯录管理系统
- DAY2作业-假如生活欺骗了你!
- 类加载器的使用。和加载器的委托机制
- ifstream(ofstream) 打开中文路径失败
- pycharm使用学习
- 接地气的flex布局
- C语言获取文件字节大小及读取内容到内存简单例子