V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
supman
V2EX  ›  问与答

求助个 javascript 中 setimeout 的问题

  •  
  •   supman · 2014-12-20 14:23:59 +08:00 · 2006 次点击
    这是一个创建于 3431 天前的主题,其中的信息可能已经有所发展或是发生改变。
    for (var i = 0; i < 10; i++) {
    setTimeout(function(){alert(i)}, 8000*i);

    }

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

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

    谢啦:)
    3 条回复    2014-12-20 14:53:43 +08:00
    skybr
        1
    skybr  
       2014-12-20 14:39:26 +08:00
    setTimeout( alert.bind(this, i), 8000*i);
    Mutoo
        2
    Mutoo  
       2014-12-20 14:43:48 +08:00
    由于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
       2014-12-20 14:53:43 +08:00
    @skybr
    @Mutoo

    谢谢两位啦, 两种方法都有效 :) 谢谢Mutoo的解释 :)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3872 人在线   最高记录 6547   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:24 · PVG 12:24 · LAX 21:24 · JFK 00:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.