定时器中的上下文this是window对象,为什么定时器setTimeout()函数中的this是DOM元素#div1?

定时器中的上下文this是window对象,为什么定时器setTimeout()函数中的this是DOM元素#div1?

https://img1.sycdn.imooc.com//climg/62e73dfc092ed3d012030593.jpg

https://img1.sycdn.imooc.com//climg/62e73e7c09c53c5c09620737.jpg


https://img1.sycdn.imooc.com//climg/62e73cba09d5631515840887.jpg

https://img1.sycdn.imooc.com//climg/62e73ef3091e974511900791.jpg

事件处理函数addEventListener()中的this是DOM元素#div1可以理解,为什么setTimeout()函数中的this也是DOM元素#div1?



正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,因为setTimeout中传入的回调函数是一个箭头函数,该函数中的this与调用方式无关,而是与定义时所处的作用域有关。截图中的代码,可以理解为先定义了一个箭头函数,然后作为参数传入setTimeout方法中,如下:

https://img1.sycdn.imooc.com//climg/62e7412f0947976507050538.jpg

所以添加箭头函数中的this指向return 返回的函数中的this,结合下图标注理解,this指向DOM对象

https://img1.sycdn.imooc.com//climg/62e741bf0908831410290786.jpg

祝学习愉快~

  • 电磁护盾 提问者 #1

    https://img1.sycdn.imooc.com//climg/62e7483e0914a6a914890831.jpg

    在setTimeout()中写 回调函数 相当于 在那里定义了回调函数,对吗?

    写回调函数的位置就是定义回调函数的位置对吗? 

    在这个位置既是定义函数又是执行函数?

    2022-08-01 11:28:31
  • 电磁护盾 提问者 #2

    是在throttle()函数的返回值的位置定义箭头函数的, 定义该箭头函数时所在的作用域为什么是addEventListener()函数中?

    2022-08-01 11:33:07
  • 好帮手慕慕子 回复 提问者 电磁护盾 #3

    问题解答如下:

    1、对的,书写回调函数的位置相当于就是在那里定义了函数。

    2、这个位置只是定义函数,实际是在调用setTimeout函数执行函数内部代码时才调用回调函数

    祝学习愉快~

    2022-08-01 11:33:24
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师