高频面试题之this指向问题

本文探讨了JavaScript中this的指向问题,通过五个面试题目详细分析了不同场景下this的指向,包括函数调用位置、ES6 class中的this行为。强调了this永远指向一个对象,其指向取决于函数调用的位置,以及在ES6 class中,方法内的this在严格模式下不会指向window。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

高频面试题之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 中
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值