this指向详解
前言+思考题
记得当时找实习的时候,总是会在简历上加上一句——熟悉Js,例如this指向、call、apply等…
而每次投递简历时我都会经历如下步骤
面试前,去问度娘——this指向可以分为哪几种啊~、call和apply的区别是什么?底气由0% 猛涨到了 50%;
面试中,面试官随便扔上来几道题,我都可以“坚定的”给出答案,结果总是不尽人意…
面试后,我会羞愧的删除掉简历上的这一条。而再之后投递简历时我又再次加上了这一条…
思考题
下面几道题是我在网上搜索出来的热度较高的问题,如果大佬们可以轻松的回答上,并有清晰的思路,不妨直接点个赞吧(毕竟也消耗了不少脑细胞),如果大佬们能在评论处指点一二,就更好了!!!
填空题:
执行Javascript中的【 】函数会创建一个新函数,新函数与被调函数具有相同的函数体,当目标函数被调用时 this 值指向第一个参数。
问答题:
请你谈一下改变函数内部this指针的指向函数有哪几种,他们的区别是什么?
this的指向可以分为哪几种?
代码分析题:
var name = 'window'
var person1 = {
name: 'person1',
show1: function () {
console.log(this.name)
},
show2: () => console.log(this.name),
show3: function () {
return function () {
console.log(this.name)
}
},
show4: function () {
return () => console.log(this.name)
}
}
var person2 = { name: 'person2' }
person1.show1()
person1.show1.call(person2)
person1.show2()
person1.show2.call(person2)
person1.show3()()
person1.show3().call(person2)
person1.show3.call(person2)()
person1.show4()()
person1.show4().call(person2)
person1.show4.call(person2)()
一、this的指向
百度、谷歌上输入“this的指向”关键字,大几千条文章肯定是有的,总不至于为了全方面、无死角的掌握它就要将所有的文章都看一遍吧?所以不如梳理出一个稳固的框架,顺着我们的思路来填充它。
思维导图
![](https://i-blog.csdnimg.cn/blog_migrate/83aae89a4542c108e89c877fd7abf916.png)
本节精华:
this 总是(非严格模式下)指向一个对象,而具体指向哪个对象是在运行时基于函数的执行环境动态绑定的,而非函数被声明时的环境;
除了不常用的with和eval的情况,具体到实际应用中,this指向大概可以分为四种:
作