V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
supman
V2EX  ›  问与答

求助个 javascript 中 setimeout 的问题

  •  
  •   supman · Dec 20, 2014 · 2416 views
    This topic created in 4154 days ago, the information mentioned may be changed or developed.
    for (var i = 0; i < 10; i++) {
    setTimeout(function(){alert(i)}, 8000*i);

    }

    好不容易把setimeout用在了for循环, 现在又来问题了, 就是每次alert() 打印出来的时间, 都是10, 而不是从1~10. 请问要怎么破呢??

    http://jsfiddle.net/ (javascript在线运行)

    谢啦:)
    3 replies    2014-12-20 14:53:43 +08:00
    skybr
        1
    skybr  
       Dec 20, 2014
    setTimeout( alert.bind(this, i), 8000*i);
    Mutoo
        2
    Mutoo  
       Dec 20, 2014
    由于js 里词法作用域的关系 function 里的 i 引用的是闭包中的 i 当程序执行到 function 的时候,i 已经变成 10 了。setTimeout 的时候并没有保留当时的 i 的副本,所以可以这样改:

    for (var i = 0; i < 10; i++) {
    setTimeout(function(x){alert(x)}, 8000*i, i);
    }
    supman
        3
    supman  
    OP
       Dec 20, 2014
    @skybr
    @Mutoo

    谢谢两位啦, 两种方法都有效 :) 谢谢Mutoo的解释 :)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5665 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 01:45 · PVG 09:45 · LAX 18:45 · JFK 21:45
    ♥ Do have faith in what you're doing.