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
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…