Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
384 views
in Technique[技术] by (71.8m points)

一道关于事件循环的笔试题

image.png

我的答案是(现已修改为正确答案 并 通过运行验证):
(1)执行 new Counter()

// 执行new Counter()
timer1,NaN,1024
timer2,1,1024,
timer1,NaN,1024+996
timer1,NaN,1024+996*2
timer1,NaN,1024+996*3
timer1,NaN,1024+996*4
timer1,NaN,1024+996*5
timer1,NaN,1024+996*6
timer1,NaN,1024+996*7

(2)执行 Counter()

// 执行Counter()
timer1,1,1024
timer2,2,1024,
timer1,3,1024+996
timer1,4,1024+996*2
timer1,5,1024+996*3
timer1,6,1024+996*4
timer1,7,1024+996*5
timer1,8,1024+996*6
timer1,9,1024+996*7

不知道是否正确,可以顺便讲一下考点吗?方便查缺补漏,感谢~


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Counter()new Counter() 并不影响 timer 的执行顺序与时机。所以,两者 timer 的顺序与 gap 值应该是一样的。

JSON.parse 的时候,两个回调都无法执行,但是 timer1 的回调会被加入队列(这发生在 JSON.parse 结束之前,setInterval执行过 996ms 之后)。之后,timer2 的回调被加入队列。所以,一定是 timer1 的回调先执行,之后是 timer2 的。而且,两个 timer 回调第一次执行的时间几乎是一样的。(1024ms)

之后 8 次输出,都是 timer1 从回调上一次执行结束开始重新计时,1024+996 * n

Counter()new Counter() 会影响函数中的几个 this
Counter() 里,所有的 this 都是全局对象,大家是同一个。this.num 的输出会是 1,2,3, ....
但是,new Counter() 里,只有 timer1 回调里的 this 是全局对象,其它所有的 this 都是同一个新对象(new Counter() 的返回值)。于是,new Counter() 里,timer1 回调里的 this.num 是没有被初始化的(undefined),++ 之后是 NaN ,并且会一直是 NaN 。而 timer2 回调里的 this.num 会输出 1.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...