JS闭包(closure)一个应用示例
2017-07-01 00:24
281 查看
在自己用js闭包前其实也没有太懂为啥要用闭包。前几天碰到了一个问题,用闭包解决了。背景是我不停地要向不同的ip发两条命令,两条命令之间相隔100ms发送。
最早的程序大概类似这样:
开始我以为运行结果会是1,2,1,2,因为我觉得在设定timeout的时候ip和port是1,2,在执行时也应该是1,2。其实发现是1,2,4,6。
后来把程序改成了这样:
搞定了。返回头看,这就是闭包。w3c对闭包的解释:A closure is a function having access to the parent scope, even after the parent function has closed.在timeout执行aaa时,bbb已经结束了,但是其参数依然有效。
最早的程序大概类似这样:
var ip = 1; var port = 2; function aaa(ip, port){ console.log(ip); console.log(port); } aaa(ip, port) setTimeout(function(){aaa(ip, port)}, 100) //第二条命令还发出去,目标ip和port已经变了 ip = 4; port = 6;
开始我以为运行结果会是1,2,1,2,因为我觉得在设定timeout的时候ip和port是1,2,在执行时也应该是1,2。其实发现是1,2,4,6。
后来把程序改成了这样:
var ip = 1; var port = 2; function bbb(ip, port){ aaa(ip, port) setTimeout(function(){aaa(ip, port)}, 100) function aaa(ip, port){ console.log(ip); console.log(port); } } bbb(ip, port) ip = 4; port = 6;
搞定了。返回头看,这就是闭包。w3c对闭包的解释:A closure is a function having access to the parent scope, even after the parent function has closed.在timeout执行aaa时,bbb已经结束了,但是其参数依然有效。
相关文章推荐
- 小程序大问题,MSDN中一个小小示例所带来的疑问,一个关于DataList的一个简单应用
- 创建一个简单的WebPart应用示例
- 从helloworld开始构建一个node.js+socket.io+express4实时应用示例
- nodejs入门教程二:创建一个简单应用示例
- Notification的一个简单应用代码示例
- 创建一个简单的WebPart应用示例
- 一个简单的freemarker应用示例
- iBatis环境搭建示例:创建一个最简单的iBatis应用
- Vue.js教程: 构建一个预渲染SEO友好的应用示例
- 这是我用 javascript 制作的“Dual listbox”(双向选择器)的一个应用示例
- 数据库表将一个表的列PIVOT,UNPIVOT 应用小示例
- 推荐一个基于Microsoft ASP.NET MVC Preview 2 的应用示例
- PHP模板引擎Smarty(一)Smarty下载、配置、一个最简单的应用示例
- jQuery在Rails3中的一个简单应用示例
- 一个多线程应用的最佳示例
- 推荐一个基于Microsoft ASP.NET MVC Preview 2 的应用示例
- 利用OnCreateControl实现控件风格一致(一个OnCreateControl方法的应用示例)
- GCC弱符号的一个应用示例
- Python实现对一个函数应用多个装饰器的方法示例
- CLR学习笔记--Attribute应用的一个小示例