javascript - 像这种是闭包吗?
本文介绍了javascript - 像这种是闭包吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
component.on('load',function(){
var s = 0;
for (var i = 0; i < 100; i++) {
setTimeout(function(){
s+=0.01;
draw(s);
},i*10);
}
});
我理解的闭包是一个函数定义在一个函数中,这个函数内引用有外部函数的变量,然后在外部函数的外面被执行.
但是今天看一个视频说上面setTimeout利用了闭包,我搞不懂哪里用到闭包了,是我对闭包的理解有错误吗?
解决方案
是闭包。
我再写个更简单版的:
var s = 1;
setTimeout(function() {
s = s + 1;
}, 1000);
为什么是闭包呢?
从事件循环的角度来看,外部变量s
原本在当前这一轮事件循环就会被销毁的。但是现在它被setTimeout的回调函数引用了,而setTimeout的回调函数一定是在下一轮或者更久以后的事件循环中被调用,所以s
的生命周期被延长到那个时候。这就是闭包。
你可能会说:这里并没有函数套函数啊?是的,谁说必须要函数套函数才是闭包了?!其实只要是一个函数引用了外部作用域中的变量,使得变量的生命周期得到延长,就是闭包了。虽然上述函数没有套在闭包里,但是它套在了全局作用域中。
这篇关于javascript - 像这种是闭包吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文