面试题:this指向
2024-01-07 16:10:59this是一个在运行时才进行绑定的引用,在不同的情况下它可能会被绑定不同的对象。
this关键字由来
在对象内部的方法中使用对象内部的属性是一个非常普遍的需求。但是JavaScript的作用域机制并不支持这一点,基于这个需求,JavaScript又搞出来另外一套this机制。
this在什么时候确定下来
this和作用域不一样,作用域是声明的时候就定下来了,this是在调用的时候才确定下来
this存在场景
全局执行上下文
在全局执行环境中无论是否在严格模式下,(在任何函数体外部)this 都指向全局对象.
当普通函数在执行时,如果是严格模式,内部的this指向undefined,如果非严格模式,内部的this指向Window对象。
函数执行上下文
在函数执行上下文中访问this,函数的调用方式决定了
this
的值。在全局环境中调用一个函数,函数内部的 this 指向的是全局变量 window,通过一个对象来调用其内部的一个方法,该方法的执行上下文中的 this 指向对象本身。eval执行上下文
this绑定方式
默认绑定
隐式绑定
显示绑定
通过call、apply、bind方式,调用,如果第一个参数是undefined、null时,里面的this指向window,如果是普通变量时,现转化成对象,this指向这个对象
new绑定
箭头函数绑定
箭头函数内部没有this,因此不能做构造函数 箭头函数没有prototype,也没有arguments 箭头函数并不会创建其自身的执行上下文,所以箭头函数中的 this 取决于它的外部函数
首先,箭头函数不会创建自己的 this,它只会从自己的作用域链上找父级执行上下文的 this,而不是谁调用它,它的 this 就是谁。所以箭头函数中的 this,取决于你上层执行上下文的 this 。
var abc = {
getNum: () => {
console.log(this); // Window
}
}
abc.getNum();
const sum = () => {
console.log(this); // Window
}
sum();