【前端每天一题】🔥 第 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:绑定到新对象
相关推荐
前端摸鱼匠4 小时前
Vue 3 的v-bind合并行为:讲解v-bind与普通属性合并的规则
前端·javascript·vue.js·前端框架·ecmascript
REDcker4 小时前
浏览器端Web程序性能分析与优化实战 DevTools指标与工程清单
开发语言·前端·javascript·vue·ecmascript·php·js
donecoding5 小时前
一个 sudo 引发的血案:npm 全局包权限错乱彻底修复
前端·node.js·前端工程化
风骏时光牛马6 小时前
Raku正则匹配与数据批量处理实操案例
前端
nbwenren6 小时前
2026实测:Gemini 3 镜像站视觉能力实践——拍照原型图,一键生成 HTML+CSS 代码
前端·css·html
Lee川6 小时前
Prisma 实战指南:像搭积木一样设计古诗词数据库
前端·数据库·后端
许彰午6 小时前
我手写了一个 Java 内存数据库(二):B+ 树的插入与分裂
java·开发语言·面试
jinanwuhuaguo6 小时前
(第二十九篇)OpenClaw 实时与具身的跃迁——从异步孤岛到数字世界的“原住民”
前端·网络·人工智能·重构·openclaw
广州华水科技6 小时前
深度测评2026年单北斗GNSS位移监测系统推荐,与高口碑变形监测设备一同引领行业新风尚
前端