javascript - 为什么setInterval里面offsetLeft undefined
伊谢尔伦
伊谢尔伦 2017-04-11 12:48:33
[JavaScript讨论组]



    
    Document
    


    

为什么 Uncaught TypeError: Cannot read property 'offsetLeft' of undefined???
该怎么修改??谢谢

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(2)
ringa_lee

setInterval形成异步回调,因而,实际上最后执行的是

setInterval(function(){
                left[i]=ball[3].offsetLeft;
                \\other codes
            },5)

很明显 ball[3]是不存在的

解决方案则是想办法把i传进回调函数,并将其保存下来,可以参考

setInterval((function(i) {
    return function(){
      //code     
     }
})(i), 5)
巴扎黑

setInterval和setTimeout有个异步调用的机制
通俗点讲吧,比如:
f1();
setInerval(f2,1);
f3();
执行顺序 f1>f3>f2,虽然f2是1毫秒后再执行,但1毫秒对计算机来说太长,执行完f1,计算机等不了这1毫秒,就马上执行f3了,1毫秒时间到了,这时计时器告诉计算机:"嘿,哥们你要执行f2了"

你的情况类似,只是嵌套在循环里,虽然定时器设置了5毫秒,但是计算机太快了,一下子把循环都执行了,这时候 i=ball.length 回过神来,发现还有函数没执行呢, 一执行,i已经是数组的长度了 ball[i]是undefined,所以没有offsetLeft,就报错了

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号