search

Home  >  Q&A  >  body text

javascript - JS--新手请教一个小小的JS问题

我给webSkill里面加了SPAN标签 我想执行的时候 标签的数字不断增加,可是为什么只是最后一个webSkill里面的SPAN在变化呢

这是布局,在ID为dun1下面的p里面加的span

效果显示为只有这个p下的span才在变化,我想所有SPAN都一起变化

PHPzPHPz2902 days ago430

reply all(5)I'll reply

  • PHP中文网

    PHP中文网2017-04-10 16:59:46

    循环里的事件方法,比如:click,mouseover一类的方法。
    循环里的setTimeout,setInterval。
    上述都是异步执行,也就是说当异步里的回调函数要执行时,for循环早就结束了,这时回调函数里的变量顺着作用域链开始往上找,却发现只能取循环完了最后的值。

    怎么解决呢?闭包。sf上闭包那么多,建议楼主去看看。

    reply
    0
  • 巴扎黑

    巴扎黑2017-04-10 16:59:46

    是setInterval这个函数的问题吧,实质上还是闭包的问题。

    reply
    0
  • 怪我咯

    怪我咯2017-04-10 16:59:46

    for循环里写个闭包解决这个问题

    for(var i = 0 ; i < obj.length ; i++){
        (function(i){
           ...
        })(i);
    }

    reply
    0
  • PHPz

    PHPz2017-04-10 16:59:46

    JS是单线程,setInterval会在for循环完成后再执行,这时的oSpan是最后一个,所以也只有最后一个会变化。
    一个参考的解决框架:

    for (var i = 0; i < objs.length, i++) {
        obj = objs[i];
        (function(obj2){
            setInterval(function(){
                //obj2 这时每个函数都在本地保留了一份创建时对应的对象,执行时就是对着对象执行了
            },10);
        })(obj);
    }

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 16:59:46

    不太明白你的需求。“标签的数字不断增加”不断是什么意思?按照多少时间增加一次。你这里也没time的操作啊。。。还有是自动的添加的span里面数字不断增加嘛?

    reply
    0
  • Cancelreply