您的位置:首页 > Web前端 > JavaScript

JS闭包(closure)一个应用示例

2017-07-01 00:24 281 查看
在自己用js闭包前其实也没有太懂为啥要用闭包。前几天碰到了一个问题,用闭包解决了。背景是我不停地要向不同的ip发两条命令,两条命令之间相隔100ms发送。

最早的程序大概类似这样:

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已经结束了,但是其参数依然有效。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: