老师这里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的使用方法,函数可以使用“名字()”的形式调用:

此时this指向window:

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


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

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}
3、后面的几句代码也是同样的道理,返回的都是箭头函数,this都是指向foo函数中的this,所以最终只有一个this。
祝学习愉快!
相似问题