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

放在外面我测试了一下是可以的,逻辑上来说,变成了false之后就变不回true了,然后得等mouseout来清楚,但是如果放在for in 上面的话,只要其中一个参数到达了目标值,flag就是false然后就clear定时器了,不是就无效了么

放在外面我测试了一下是可以的,逻辑上来说,变成了false之后就变不回true了,然后得等mouseout来清楚,但是如果放在for in 上面的话,只要其中一个参数到达了目标值,flag就是false然后就clear定时器了,不是就无效了么

正在回答

3 回答

 flag放在函数外面也行,但是每次执行都必须初始化 flag 为 true,其次,flag 的 初始化 必须放在 for in 循环上面

(不管你在哪定义flag)。 因为是for in 循环,参数达到目标之后,确实不执行你说的 icur != json[changeType] ; 

但是,其余的for 循环时,会对其他的元素进行这个判断 if (attr !== json[attr] ) ;如果不等,flag 就变成了false;

你可能看错了一个地方,if(flag === true){.....} 是放在整个for 循环外面的,并没有在for 循环里面。所以在循环

的 n 次过程中,只要有一次 不等于目标值,flag 就成了false, 循环结束之后,才判断 if(flag === true){.....},如果都到了目标,就是没有执行 flag = false 的if语句 ,flag = true ,才会终止计数器

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

protry 提问者

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

protry 提问者

确实是我看错了for循环的结束位置
2016-05-17 回复 有任何疑惑可以回复我~
#3

蓝蜗牛7788 回复 protry 提问者

哈哈,我也是看错了位置
2016-08-18 回复 有任何疑惑可以回复我~
#4

蓝蜗牛7788

谢谢 不再热情似火
2016-08-18 回复 有任何疑惑可以回复我~
查看1条回复

我也觉得很迷。。。

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

慕UI1487848

我刚刚想明白了: 正确的是:flag放在定时器内,for..in上面时。 进入定时器,flag进来设置成true,并且for..in循环里所有的属性-值判断都“共用”一个flag,没达到的就把flag设置成了false,达到的就 不作为,无论哪个,只要有一个没达到,flag都是false,就继续跑定时器。 自我总结:开始是没看清楚,它们都共用一个flag,还有老师视频是把flag声明放在定时器外,我试了试这样写链式运动会失效。
2016-07-21 回复 有任何疑惑可以回复我~

老师写的是if (attr !== json[attr] ) { flag = false; } 然后清除定时器时的语句是 if( falg === true){..........}

如果有一个没有达到目标值,(外面有一个for循环)flag 就会变成false,就不会执行for循环之后的 if(flag) 语句,

定时器的function结束之后,flag被撤销,在次执行的时候,重新生成了新的flag(true),然后再次进行判断。

不存在你说的一个到达了目标flag就变成了true的情况

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

protry 提问者

我的意思是,现在flag是放在定时器外面的,它的作用域应该是整个定时器,那么第一次循环的时候,icur != json[changeType]是肯定成立的,flag就变成了false,当再次启动定时器的时候flag已经是false了,那么flag就一直不会变成false了,直到三个参数都达到了目标值也还是false。
2016-05-17 回复 有任何疑惑可以回复我~
#2

protry 提问者

另外一种情况,当flag放在定时器里面的时候,也就是for in的上面,那么每次定时器被重新触发的时候flag都会被初始化为true,但是当有其中一个参数到达目标值的时候,icur != json[changeType]这个等式应该是不执行的,所以会执行下面的清楚定时器的操作,那么整个操作也是停止了。 我就是觉得用flag标记来对三个参数这样来做判断从逻辑上来说不合理,或者说我没有理解对
2016-05-17 回复 有任何疑惑可以回复我~
#3

不肖生 回复 protry 提问者

我也正在纳闷这个额问题,但是他们的解释好像都不能很好地回答。不知道你现在弄明白了没有。
2016-07-16 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

放在外面我测试了一下是可以的,逻辑上来说,变成了false之后就变不回true了,然后得等mouseout来清楚,但是如果放在for in 上面的话,只要其中一个参数到达了目标值,flag就是false然后就clear定时器了,不是就无效了么

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