扫码关注官方订阅号
Document
为什么 Uncaught TypeError: Cannot read property 'offsetLeft' of undefined???该怎么修改??谢谢
小伙看你根骨奇佳,潜力无限,来学PHP伐。
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了"
f1>f3>f2,
执行完f1,计算机等不了这1毫秒,就马上执行f3了
你的情况类似,只是嵌套在循环里,虽然定时器设置了5毫秒,但是计算机太快了,一下子把循环都执行了,这时候 i=ball.length 回过神来,发现还有函数没执行呢, 一执行,i已经是数组的长度了 ball[i]是undefined,所以没有offsetLeft,就报错了
i=ball.length
ball[i]
offsetLeft
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
setInterval形成异步回调,因而,实际上最后执行的是
很明显 ball[3]是不存在的
解决方案则是想办法把i传进回调函数,并将其保存下来,可以参考
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,就报错了