博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS闭包
阅读量:6263 次
发布时间:2019-06-22

本文共 677 字,大约阅读时间需要 2 分钟。

hot3.png

闭包:

闭包就是能够读取其他函数内部变量的函数。

闭包用处:

1,可以读取函数内部的变量,

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,可以在函数外部对函数内部的局部变量进行操作。

转载于:https://my.oschina.net/objectboy/blog/900511

你可能感兴趣的文章
RedisHelper帮助类
查看>>
js进阶 10-1 JQuery是什么
查看>>
Hadoop生态圈-Flume的组件之自定义拦截器(interceptor)
查看>>
orcale查询表之间的关联关系
查看>>
关于pythoh面向过程开发人员三步转面向对象的补充,再加一步,四步走战略。转面向对象也可以有固定公式。...
查看>>
SVN设置必须锁定
查看>>
(Apache)ab 压力测试 简单使用
查看>>
程序包com.sun.image.codec.jpeg不存在解决方法
查看>>
Linux也有后悔药,五种方案快速恢复你的系统
查看>>
OpenLDAP在win2008上安装配置
查看>>
根据id查询所有子节点/父节点,mysql 以及ssm前后台处理流程
查看>>
如何提交内核补丁--checkpatch.pl使用【转】
查看>>
MFC程序显示控制台输出
查看>>
网易博客挂了,转一篇以前的文章过来纪念一下吧。。
查看>>
三角形(css3)
查看>>
Cgroups 与 Systemd
查看>>
java三大框架实现任务调度——IRemindService
查看>>
(Z)MySQL变量的使用
查看>>
浅谈命令查询职责分离(CQRS)模式
查看>>
洛谷P1481 魔族密码(LIS)
查看>>