为了账号安全,请及时绑定邮箱和手机立即绑定

按老师这样写是不是有bug?

因为 在触发函数时 用了flag = true,  但是在setinterval 中 其实必然只能是false 没有办法改回ture的状态。 所以setInterval 其实一直也停不下来,咱们看见东西不动了只是因为当前值与目标值已经一致 所以 speed 怎么也都是0. 但是

正在回答

4 回答

var flag=true;这一句是应该放在setInterval内部吧,老师可能写错地方了。按老师这个判断方法真的好精简!

0 回复 有任何疑惑可以回复我~
#1

嘛也不会 提问者

非常感谢!
2016-10-23 回复 有任何疑惑可以回复我~
#2

慕粉aidan

必须放在外部,  但是。。。。。但是。。。但是。。。重要的事,,当你30ms函数还没执行完成,或许还没有到判断到if(icur!=json[attr]){flag=false;}这个位置的时候,你的定时器已经进行下轮循环了,这样的话flag有涉嫌被重写的嫌疑,所以不能放在setInterval内部。如果循环事件长点的话,或许可以放内部。。有个问题就是 flag要声明在setInterval之外,要不然每次循环都要申请内存,资源浪费,微观世界我个觉得挺大一堆开销。。。看下面
2016-10-24 回复 有任何疑惑可以回复我~

虽然我不知道哦为什么要写在外部,但是我内外都试过了。

如果写在循环内部,你的物体运动达不到你想要的目标值,并且每次差值还不一样。。。

写在外部就没有这个bug出现。。。

以上。。。我不懂原理,只能告诉你效果。。。

0 回复 有任何疑惑可以回复我~

for循环很快的,如果for循环都需要几十毫秒,循环体得累赘成啥样

0 回复 有任何疑惑可以回复我~

必须放在外部,   原因一:放在setInterval内部并且在for之前,每次当if(icur!=json[attr]){flag=false;},就是说当到达某个属性目标值时,然后下次就绕过它了,判断其它的属性值是否到达目标值,如果没到达,继续flag=false;然后又开始循环被var flag=true;直到所有属性都到达目标值时flag才为true;

  这是正常的逻辑思维,但是。。。。。但是。。。但是。。。重要的事,,当你30ms函数还没执行完成,或许还没有到判断到if(icur!=json[attr]){flag=false;}这个位置的时候,你的定时器已经进行下轮循环了,这样的话flag有涉嫌被重写的嫌疑,所以不能放在setInterval内部。如果循环事件长点的话,或许可以放内部。。。。 

有个问题就是 flag要声明在setInterval之外,要不然每次循环都要申请内存,资源浪费,微观世界我个觉得挺大一堆开销


1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

按老师这样写是不是有bug?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信