this 作为JavaScript中的一个关键字,它的复杂度很高,主要原因是它所处不同场景的代表的指向是不一样的。这里先做一个结论,重要事情说三遍:
this的指向是由上下文环境动态决定的
this的指向是由上下文环境动态决定的
this的指向是由上下文环境动态决定的
关注我的头条号,分享更多的技术学习文章,我自己是一名从事了多年开发的web前端老程序员,前段时间我花了一个月整理了一份最适合2020年学习的web前端学习干货,各种框架都有整理,送给每一位前端小伙伴,想要获取的可以关注我的头条号并在后台私信我:前端,即可免费获取。
this指向实例场景
关于this的指向的不确定性,主要体现在如下几个应用场景中:
全局环境
普通函数调用
由call/apply/bind函数调用
对象属性方法调用
构造函数调用
箭头函数
全局环境
在全局环境中无论是否是严格模式,this 均指向全局对象,例如浏览器端的 window
// 在浏览器中, window 对象同时也是全局对象:
console.log(this === window); // true
a = 37;
console.log(window.a); // 37
this.b = “MDN”;
console.log(window.b) // “MDN”
console.log(b) // “MDN”
普通函数调用
当普通的函数,直接调用的时候,一般来说分两种情况:
严格模式绑定到 undefined
非严格模式绑定到全局对象 window
function