V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
sd4399340
V2EX  ›  JavaScript

关于setInterval

  •  
  •   sd4399340 · 2012-06-14 14:54:43 +08:00 · 3317 次点击
    这是一个创建于 4579 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大家有没有碰到这样一种情况,比如:

    function test(a,b,c) {
    ...animation // 很多动画,有的超过2s
    ...setTimeout(function..., 5000)
    }


    setInterval(function(){
    // a,b,c 随时间变动
    test(a,b,c);
    },1000)


    现在我发现,test()里面的animation并不按顺序来,很混乱,
    我想是由于test函数每隔1s执行一次,而test函数本身肯定还没执行完毕,
    因为动画需要时间,而且后面还有setTimeout的时间,
    所以当一个test还没有执行完时,程序又再次进入test函数,
    变量间会不会有冲突?
    9 条回复    1970-01-01 08:00:00 +08:00
    qiayue
        1
    qiayue  
       2012-06-14 14:59:51 +08:00
    你是想每隔一秒执行一次还是每执行完一次才执行下一次?
    sd4399340
        2
    sd4399340  
    OP
       2012-06-14 15:19:07 +08:00
    @qiayue 我是想每隔1s执行一次啊,但是感觉它并没有按test里动画顺序来
    krazy
        3
    krazy  
       2012-06-14 15:22:22 +08:00
    js的定时器工作原理不是这样的,可以看下这个,里面有幅图很经典
    http://ejohn.org/blog/how-javascript-timers-work/
    总结一下就是
    定时器的那个时间不靠谱。
    js是单线程的,异步事件按队列依次执行。
    如果定时器被正在执行的代码阻塞了,那么就等到那段代码执行完的合适时机再触发。
    qiukun
        4
    qiukun  
       2012-06-14 15:24:56 +08:00
    当一个test还没有执行完时,程序又再次进入test函数,
    变量间会不会有冲突?
    这个想法太奇葩了,难道 js 是这样奇葩的语言吗?从别的地方去想。我怀疑动画部分操纵的对象被同时操操坏了。(非线程安全?)求专业人士
    sd4399340
        5
    sd4399340  
    OP
       2012-06-14 15:53:28 +08:00
    @qiukun 我也觉得这个想法比较扯淡。。。但是程序执行的结果就像是这样的。。。
    js单线程的吧,牵扯到线程安全?
    sd4399340
        6
    sd4399340  
    OP
       2012-06-14 16:03:16 +08:00
    @krazy 这文章不错,谢了,我好好看看~
    icyflash
        7
    icyflash  
       2012-06-14 16:24:54 +08:00
    youngershen
        8
    youngershen  
       2012-06-14 16:39:04 +08:00
    楼主搞不清楚setInterval和setTimeout的区别
    sd4399340
        9
    sd4399340  
    OP
       2012-06-14 16:40:18 +08:00
    @youngershen 这个搞得清的,可能是我问题描述的有点奇怪吧。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5276 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 09:28 · PVG 17:28 · LAX 01:28 · JFK 04:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.