老师这里t1 t2 t3为什么那么多括号,这是什么写法?

来源:3-9 选择练习

WYW265672

2022-05-15 22:18:19

能看懂只有一个this

但是这几个()的写法什么意思?什么区别 ,看不懂

var t1=f.call({})()();
var t1=f().call({})();
var t1=f()().call({});


写回答

1回答

樱桃小胖子

2022-05-16

同学你好,这是call的使用方法,函数可以使用“名字()”的形式调用:

https://img.mukewang.com/climg/5ff1a22409feb90800000000.jpg

此时this指向window:

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

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

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

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


所以练习题中:

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

https://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})()后返回的函数。老师简单画图标注了一下,同学可以结合下图理解:

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

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

祝学习愉快!

0

0 学习 · 17877 问题

查看课程