【前端每天一题】🔥 第 11 题:this 的指向规则(前端高频必考题)

this 的指向规则 - 前端高频必考题

第 11 题:this 的指向规则

第 11 题:this 的指向规则(前端高频必考题)


一、this 的核心原则(最重要一句话)

this 的指向取决于函数的调用方式,而不是定义方式。


二、this 的 5 大指向规则(按优先级从低到高)

⭐ 1. 默认绑定(函数直接调用)

javascript 复制代码
function fn() {
  console.log(this)
}
fn()  // this → window(严格模式下是 undefined)
面试解释:
  • 非严格模式下:指向 window
  • 严格模式下:指向 undefined

⭐ 2. 隐式绑定(对象调用)

javascript 复制代码
const obj = {
  name: 'A',
  say() {
    console.log(this.name)
  }
}
obj.say() // this → obj

调用点在 obj,所以 this → obj

重点:看点号左边是谁


⭐ 3. 显式绑定(call / apply / bind)

javascript 复制代码
function fn() { console.log(this.name) }

fn.call({ name: 'A' })
fn.apply({ name: 'B' })
fn.bind({ name: 'C' })()
  • call/apply 立即执行
  • bind 返回新函数

⭐ 4. new 绑定(构造函数指向新对象)

javascript 复制代码
function Person(name) {
  this.name = name
}
const p = new Person('Y')
console.log(p.name) // 'Y'
new 的效果:
  1. 创建新对象
  2. 绑定 this
  3. 执行构造函数
  4. 返回新对象

优先级比 call/apply 还高。


⭐ 5. 箭头函数不绑定 this(继承外层作用域)

javascript 复制代码
const obj = {
  name: 'A',
  say: () => {
    console.log(this.name)
  }
}
obj.say() // undefined

箭头函数没有自己的 this,它沿用外层(定义位置的)作用域的 this,通常是 window。


三、this 优先级(背这个就行)

scss 复制代码
new 绑定 > 显式绑定(call/apply/bind) > 隐式绑定(obj.xxx) > 默认绑定(直接调用)

四、经典面试题(几乎必考)

❓ 题目 1

javascript 复制代码
var name = 'window'

const obj = {
  name: 'obj',
  say() {
    console.log(this.name)
  }
}

const fn = obj.say
fn()       // ?
obj.say()  // ?
✔ 解析
  • fn() → 默认绑定 → window
  • obj.say() → 隐式绑定 → obj

❓ 题目 2:箭头函数 this

javascript 复制代码
var name = 'window'

const obj = {
  name: 'obj',
  say: () => console.log(this.name)
}

obj.say() // ?
✔ 解析

箭头函数取决于定义位置

外层是全局 → this = window

结果: window


❓ 题目 3:new + bind

javascript 复制代码
function Foo(name) { 
  this.name = name
}
const obj = { name: 'obj' }

const f = Foo.bind(obj)
const p = new f('A')
console.log(p.name) // ?
✔ 解析

new 优先级最高 → this 指向 p

输出: A


五、速记卡片(上班摸鱼记忆版)

javascript 复制代码
🎯 this 由调用方式决定,不由定义方式决定

🏆 优先级(背诵):
new > call/apply/bind > obj 调用 > 直接调用

🧠 箭头函数没有 this,继承外层作用域(定义处)

📌 默认绑定:window / undefined
📌 隐式绑定:点号左边是谁就是谁
📌 显式绑定:call/apply/bind
📌 new:绑定到新对象
相关推荐
梦梦代码精8 小时前
开源、免费、可商用:BuildingAI一站式体验报告
开发语言·前端·数据结构·人工智能·后端·开源·知识图谱
0思必得08 小时前
[Web自动化] Selenium执行JavaScript语句
前端·javascript·爬虫·python·selenium·自动化
程序员敲代码吗8 小时前
MDN全面接入Deno兼容性数据:现代Web开发的“一张图”方案
前端
0思必得08 小时前
[Web自动化] Selenium截图
前端·爬虫·python·selenium·自动化
疯子****9 小时前
【无标题】
前端·clawdbot
七禾页丫10 小时前
面试记录14 上位机软件工程师
面试·职场和发展
RichardLau_Cx10 小时前
【保姆级实操】MediaPipe SDK/API 前端项目接入指南(Web版,可直接复制代码)
前端·vue·react·webassembly·mediapipe·手部追踪·前端计算机视觉
不爱写程序的东方不败10 小时前
APP接口测试流程实战Posman+Fiddler
前端·测试工具·fiddler
前端菜鸟日常10 小时前
2026 鸿蒙原生开发 (ArkTS) 面试通关指南:精选 50 题
华为·面试·harmonyos
晚霞的不甘11 小时前
Flutter for OpenHarmony构建全功能视差侧滑菜单系统:从动效设计到多页面导航的完整实践
前端·学习·flutter·microsoft·前端框架·交互