3-9选择练习问题不解
这个f打印出来是:
() => {
return () => {
return () => {
console.log(this, this.id);
}
}
}
我感觉它是个独立的箭头函数了,那t1、t2、t3为啥还是指向foo呢,它不应该指向全局作用域吗?
正在回答 回答被采纳积分+1
同学你好,解答如下:
先解释整体流程:
1、首先要明确本身箭头函数是没有this的。
2、因为箭头函数会继承自作用域链中上一层的this,也就是箭头函数会顺着他的作用域链,一层一层往上找,知道找到有this为止。
3、最终this.id是按照作用域链向上去找的最后找到foo。如foo是箭头函数的话那么还会往上找最终就会找到window。但本题中foo的this指向被重新指定了。那么也就是说foo中的this属于当前的作用域本身。所以找到foo后就直接用foo中的this了。
以下是针对本题的解答:
1、f打印出来是第一个return返回出来的结果。
也就是说foo它本身是在全局中的,如下:
那么通过打印的结果可以看出foo正是window.foo,它本身的this确实是指向window。但是foo.call重新定义了this指向。
对比打印一下看看结果:
从结果上来看,不难发现foo的this已经被call重新设置指向了。
2、本题中foo.call当已经被指定了,也就是foo作用域中已经将“this”指定后,后续的return箭头函数都会在调用时随着作用域往上找this,最后找到的是foo。
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星