请问老师,setTimeout中的self.update()为什么要放在function里面?

来源:2-5 canvas实现解锁成功-canvas案例

PHXL

2019-07-26 09:26:34

http://img.mukewang.com/climg/5d3a559500014ff507820241.jpg

我知道setTimeout(self.update(),300);是直接执行update(),但是setTimeout(self.update,300);也是错的

写回答

2回答

好帮手慕星星

2019-07-26

同学你好,

1、关于定时器中的匿名函数,同学理解的没有问题。

2、this指向绑定事件的元素对象,因为reset方法是定义在canvasLock对象上的,所以this指向的就是这个对象。而在定时器中,调用定时器的是window,所以this指向的是window。而reset方法是在canvasLock对象上的,所以提前定义self接收了this(canvasLock),定时器中就用self调用。

自己可以测试理解下,祝学习愉快!

0

PHXL

提问者

2019-07-26

setTimeout(function(){self.update()},300);是定义了一个匿名函数function,并在里面调用了self.update();所以不会立即执行。

http://img.mukewang.com/climg/5d3a5d530001490106230132.jpg

使用以上方法,在update()函数中console.log(this)结果是canvasLock对象,

但使用window.setTimeout(self.update,300);然后在update()函数中console.log(this)为啥变成了 window对象


0

0 学习 · 4826 问题

查看课程