课程中提到改变this指向的第一种方法,为什么要在匿名函数中调用?

课程中提到改变this指向的第一种方法,为什么要在匿名函数中调用?

http://img1.sycdn.imooc.com//climg/5e50d83408b1b63c10500425.jpg上面是我的写法,下面是老师课程中提到的写法。两种写法有什么区别,我的写法报错了。

正在回答

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

2回答

同学你好,是谁调用的问题。

hover中有两个匿名函数,那么匿名函数中的this指向的就是调用hover的元素,也就是这种情况:

http://img1.sycdn.imooc.com//climg/5e51194b09d353bd03540210.jpg

http://img1.sycdn.imooc.com//climg/5e511457097e3de802350059.jpg

obj.show和obj.hide就相当于两个匿名函数

而手动添加匿名函数后

http://img1.sycdn.imooc.com//climg/5e511981096cdac303040109.jpg

http://img1.sycdn.imooc.com//climg/5e5119a9096d168f02500059.jpg

show方法是obj调用的,所以this指向obj,不是div。

祝学习愉快!

  • 陈莺莺呀 提问者 #1
    好的,感谢老师。没想到老师还没下班,我以为你们朝九晚五呢。
    2020-02-22 20:32:09
好帮手慕星星 2020-02-22 16:40:46

同学你好,如果不加匿名函数,可以输出下show方法中的this指向

http://img1.sycdn.imooc.com//climg/5e50e86a09287c3104280108.jpg

http://img1.sycdn.imooc.com//climg/5e50e8730930815705430036.jpg

指向的是触发hover的dom元素,并不是Dropdown对象,改变了show方法中的this指向,所以会有问题。

加上匿名函数调用show方法,后面加了(),this指向不会改变,还是Dropdown 。自己可以测试理解下。

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

  • 提问者 陈莺莺呀 #1
    我想知道背后的原理,是因为匿名函数创建了一个新的局部作用域吗?这个用作用域链的原理应该怎么解释呢?
    2020-02-22 16:46:26
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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