高频面试题之this指向问题
想要理解this,你可以先记住以下三点:
1:this永远指向一个对象;
2:this的指向完全取决于函数调用的位置;
3:立即执行函数中的this指向window。
先来看几道题目
题目一
被 let 声明的变量不会作为全局对象 window 的属性,而被 var 声明的变量却可以
所以题目中 全局中的 length 变量必须用 var 声明后续才可以使用,否则会出现新的情况,后续题目五会涉及到
var length = 10
function fn() {
return this.length
}
const obj = {
length: 5,
test1: function () {
return fn()
}
}
let test2 = obj.test1
console.log(obj.test1()) // 10
console.log(test2()) // 10
- 先分析 test2 ,它总是在全局环境执行(被 window 对象所调用),所以 test2 中的 this 总是指向 window 对象的,所以在前四个题目中,与 test2 相关的打印 其结果都是 10
- 在这个情况下,我们分析第一个打印 console.log(obj.test1()) 的运行逻辑
obj.test1() 执行之后的结果是 fn()
console.log(obj.test1()) 到 console.log(fn()) , 所以 fn 中