-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
【进阶3-2期】JavaScript深入之重新认识箭头函数的this #21
Comments
真棒 |
有那么复杂么, 我认为就一句话, 箭头函数没有"自己"的this, this的值是父级函数的值 |
赞 |
插眼 |
思考题: function _say() {
console.log(this);
}
console.log(obj);
var obj = {
say: _say.bind(obj)
}
obj.say(); 输出 如有误请指正 |
有些不理解,先标记一下 |
不太明白上期思考题,第一个为什么打印1,那个立即执行函数不是在 myObject.add的域中嘛 |
在我的理解里:像add是由myObject这个对象调用。所以add的this指向myObject。立即执行函数没有对象去调用它所以执行window。就像setTimeout那样 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
本期的主题是this全面解析,本计划一共28期,每期重点攻克一个面试重难点,如果你还不了解本进阶计划,文末点击查看全部文章。
如果觉得本系列不错,欢迎点赞、评论、转发,您的支持就是我坚持的最大动力。
上篇文章详细的分析了各种this的情况,看过之后对this的概念就很清晰了,没看过的去看看。
我们知道this绑定规则一共有5种情况:
其实大部分情况下可以用一句话来概括,this总是指向调用该函数的对象。
但是对于箭头函数并不是这样,是根据外层(函数或者全局)作用域(词法作用域)来决定this。
对于箭头函数的this总结如下:
箭头函数不绑定this,箭头函数中的this相当于普通变量。
箭头函数的this寻值行为与普通变量相同,在作用域中逐级寻找。
箭头函数的this无法通过bind,call,apply来直接修改(可以间接修改)。
改变作用域中this的指向可以改变箭头函数的this。
eg.
function closure(){()=>{//code }}
,在此例中,我们通过改变封包环境closure.bind(another)()
,来改变箭头函数this的指向。题目1
空
白
占
位
符
正确答案如下:
最后一个
person1.show4.call(person2)()
有点复杂,我们来一层一层的剥开。var func1 = person1.show4.call(person2)
,这是显式绑定,调用者是person2
,show4
函数指向的是person2
。func1()
,箭头函数绑定,this指向外层作用域,即person2
函数作用域首先要说明的是,箭头函数绑定中,this指向外层作用域,并不一定是第一层,也不一定是第二层。
因为没有自身的this,所以只能根据作用域链往上层查找,直到找到一个绑定了this的函数作用域,并指向调用该普通函数的对象。
题目2
这次通过构造函数来创建一个对象,并执行相同的4个show方法。
空
白
占
位
符
正确答案如下:
题目一和题目二的区别在于题目二使用了new操作符。
上期思考题解
依次给出console.log输出的数值。
答案有两种情况,分为严格模式和非严格模式。
TypeError: Cannot read property 'num' of undefined
解答过程:
内容来自评论区:【进阶3-1期】JavaScript深入之史上最全--5种this绑定全面解析
本期思考题
分别给出console.log输出的内容。
参考
进阶系列目录
交流
进阶系列文章汇总:https://github.com/yygmind/blog,内有优质前端资料,欢迎领取,觉得不错点个star。
我是木易杨,网易高级前端工程师,跟着我每周重点攻克一个前端面试重难点。接下来让我带你走进高级前端的世界,在进阶的路上,共勉!
The text was updated successfully, but these errors were encountered: