我给webSkill里面加了SPAN标签 我想执行的时候 标签的数字不断增加,可是为什么只是最后一个webSkill里面的SPAN在变化呢
这是布局,在ID为dun1下面的div里面加的span
效果显示为只有这个div下的span才在变化,我想所有SPAN都一起变化
我给webSkill里面加了SPAN标签 我想执行的时候 标签的数字不断增加,可是为什么只是最后一个webSkill里面的SPAN在变化呢
这是布局,在ID为dun1下面的div里面加的span
效果显示为只有这个div下的span才在变化,我想所有SPAN都一起变化
for循环里写个闭包解决这个问题
for(var i = 0 ; i < obj.length ; i++){
(function(i){
...
})(i);
}
JS是单线程,setInterval会在for循环完成后再执行,这时的oSpan是最后一个,所以也只有最后一个会变化。
一个参考的解决框架:
for (var i = 0; i < objs.length, i++) {
obj = objs[i];
(function(obj2){
setInterval(function(){
//obj2 这时每个函数都在本地保留了一份创建时对应的对象,执行时就是对着对象执行了
},10);
})(obj);
}
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答895 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
循环里的事件方法,比如:click,mouseover一类的方法。
循环里的setTimeout,setInterval。
上述都是异步执行,也就是说当异步里的回调函数要执行时,for循环早就结束了,这时回调函数里的变量顺着作用域链开始往上找,却发现只能取循环完了最后的值。
怎么解决呢?闭包。sf上闭包那么多,建议楼主去看看。