老师,题目里面的this能看懂只有1个this,下面的var这里看迷糊了。​

来源:3-9 选择练习

慕UI4313976

2021-08-17 17:06:23

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


写回答

1回答

好帮手慕慕子

2021-08-17

同学你好,这里主要是call的使用。之前讲过call方法,视频链接为:https://class.imooc.com/lesson/2124#mid=50534 

同学可以再回顾一下。老师再简单为同学介绍一下:

函数可以使用“名字()”的形式调用:

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

此时this指向window:

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

还可以使用call方法来调用函数,其中call的第一个参数,可以用来改变this的指向,如下

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

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

所以练习题中:

1、var f = foo.call({id:1})含义是:调用foo,并把this指向{id:1},foo调用之后返回值第一个return的箭头函数,所以此时的f表示返回的第一个箭头函数,如下:

http://img.mukewang.com/climg/611b7f8a099eda3c10120650.jpg

2、var t1 = f.call({id:2})()()这句代码含义是:f表示上一句使用call方法调用foo函数返回的箭头函数, f.call({id:2})表示通过调用call方法调用函数。返回结果是里面的箭头函数,f.call({id:2})()表示调用执行f.call({id:2})后返回的函数,f.call({id:2})()() 表示调用执行f.call({id:2})()后返回的函数。老师简单画图标注了一下,同学可以结合下图理解:

http://img.mukewang.com/climg/611b811e09ab2ef620181308.jpg

由于foo调用之后return返回值是箭头函数 ,下面的以此类推,调用函数后返回的都是箭头函数,所以即使使用call传入{id:2}对象,this指向的也是foo函数中的this,也就是{id:1}

3、后面的几句代码也是同样的道理,返回的都是箭头函数,this都是指向foo函数中的this,所以最终只有一个this。

祝学习愉快!

0

0 学习 · 17877 问题

查看课程