JavaScript中的this指向什么_在不同场景下如何确定?


JavaScript中this指向取决于函数被调用时的执行上下文:普通调用(非严格模式→全局对象,严格模式→undefined)、对象方法调用(→点号左侧对象)、显式绑定(call/apply/bind→指定对象)、new调用(→新实例)、箭头函数(→继承外层this),优先级为new>显式>隐式>默认。

JavaScript 中的 this 指向谁,不取决于函数定义的位置,而取决于函数**被调用时的执行上下文**。换句话说,看的是“谁在调用这个函数”,而不是“这个函数写在哪”。掌握 this 的核心规律,关键在于识别调用方式。

普通函数调用(非严格模式 vs 严格模式)

当函数独立调用(没有点号、没有 new、没有 call/apply/bind)时,this 的值由是否启用严格模式决定:

  • 非严格模式下,this 指向全局对象(浏览器中是 window,Node.js 中是 global
  • 严格模式下,this 是 undefined,不会自动绑定到全局对象

例如:

function foo() { console.log(this); }
foo(); // 非严格模式 → window;严格模式 → undefined

对象方法调用(隐式绑定)

当函数作为对象的属性被调用(即用 obj.method() 形式),this 指向该对象(即点号左边的对象)

  • 注意:只看调用时的“最近一层”对象,嵌套不影响
  • 如果把方法赋值给变量再调用,就丢失了对象绑定,退化为普通调用

例如:

const obj = {
  name: 'Alice',
  say() { console.log(this.name); }
};
obj.say(); // 'Alice' → this 指向 obj
const fn = obj.say;
fn(); // undefined(严格模式)或 window.name → this 不再是 obj

显式绑定与硬绑定(call / apply / bind)

通过 callapplybind 调用函数时,this 被明确指定为第一个参数的值

  • func.call(obj, a, b) → this = obj
  • func.apply(obj, [a, b]) → this = obj
  • const bound = func.bind(obj) → 返回的新函数永远以 obj 为 this
  • bind 生成的函数即使再次用 call 改写,也无法覆盖原始绑定(硬绑定优先级高)

构造函数调用(new 绑定)

使用 new 调用函数时,会创建一个新对象,并将 this 绑定到该新实例上。

  • 函数内部的 this 指向新创建的对象
  • 若构造函数显式返回一个对象,则 this 的结果被忽略;返回原始值则不影响 this 绑定

例如:

function Person(name) {
  this.name = name; // this 指向 new 出来的实例
}
const p = new Person('Bob');
console.log(p.name); // 'Bob'

箭头函数(无自己的 this)

箭头函数**不绑定自己的 this**,它会沿作用域链向上查找,继承外层普通函数(或全局)的 this 值。

  • 不能用 call/apply/bind 修改其 this
  • 不能作为构造函数(不能 new)
  • 适合用于回调、事件处理器等需要保持外层 this 的场景

例如:

const obj = {
  name: 'Charlie',
  regular() {
    console.log(this.name); // 'Charlie'
    const arrow = () => console.log(this.name); // 也输出 'Charlie'
    arrow();
  }
};
obj.regular();

优先级顺序(绑定规则冲突时)

当多种绑定方式共存,按以下优先级判断 this:

  • new 绑定 > 显式绑定(call/apply/bind) > 隐式绑定(对象方法) > 默认绑定(普通调用)
  • 箭头函数不参与该排序,它直接跳过所有规则,取外层 this

不复杂但容易忽略。


# javascript  # java  # js  # node.js  # node  # 处理器  # 浏览器  # app  # win  # 作用域 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: Python对象生命周期管理_创建销毁说明【指导】  如何在Golang中实现服务熔断与限流_Golang微服务容错与流控方法  Mac自带的词典App怎么用_Mac添加和使用多语言词典【技巧】  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  PythonPandas数据分析教程_数据清洗与处理技巧  Windows电脑如何截屏?(四种快捷方法)  PHP中require语句后直接调用返回对象方法的语法解析  php怎么连接数据库_MySQL数据库连接的基础代码编写【说明】  如何在Golang中实现文件下载_Golang文件传输与内容类型处理方法  Windows系统文件被保护机制阻止怎么办_权限不足错误处理方案  Win11怎么设置夜间模式_Windows11显示设置蓝光过滤强度  Win11系统占用空间大怎么办 Win11深度瘦身清理指南【优化】  Win11怎么关闭开机声音_Win11系统启动提示音静音【教程】  如何在 ACF 中正确更新嵌套多层的 Group 字段子字段  Win11怎么更改输入法顺序_Win11调整语言首选位置【设置】  如何使用Golang处理网络超时错误_Golang请求超时异常处理方法  Win10怎么更改用户名 Win10修改账户名称操作教程  Win11怎么设置默认终端应用_Windows11开发者选项终端  Win11怎么开启游戏模式_Win11优化游戏帧数性能【教程】  windows如何修改文件默认打开方式_windows设置程序关联教程  php怎么下载安装后测试是否成功_简单脚本验证方法【操作】  c++中的Tag Dispatching是什么_c++利用标签分发优化函数重载【元编程】  Python正则表达式实战_模式匹配说明【教程】  PHP cURL GET请求:正确设置认证与自定义请求头的完整教程  php485在php5.6下能用吗_php485旧版本兼容性问题说明【详解】  Win11键盘快捷键大全_Windows 11常用高效快捷键汇总【技巧】  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  Win11怎么修复系统文件_使用sfc命令修复Win11系统【技巧】  Windows怎样关闭锁屏广告_Windows关闭锁屏广告方法【教程】  如何使用Golang处理静态文件缓存_提高页面加载速度  php怎么捕获异常_trycatch结构处理运行时错误的技巧【方法】  Windows如何使用BitLocker To Go加密U盘?(移动驱动器加密)  Mac如何解压zip和rar文件?(推荐免费工具)  c# await 一个已经完成的Task会发生什么  c++ std::atomic如何保证原子性 c++ CAS操作原理【底层】  php485函数执行慢怎么优化_php485性能提升小技巧【技巧】  Mac怎么设置鼠标滚动速度_Mac鼠标设置详细参数  C#如何使用XPathNavigator高效查询XML  Python文本编码与解码_跨平台解析说明【指导】  Win11文件扩展名怎么显示_Win11查看文件后缀名设置【基础】  c++如何实现一个高性能的环形队列(Ring Buffer)_c++无锁实现方法【并发】  微信里的php文件怎么变mp4_微信接收php转mp4操作步骤【操作】  VSC怎么在PHP中调试MySQL_数据库交互排查技巧【教程】  ACF 教程:如何正确更新嵌套在多层 Group 字段内的子字段  如何使用Golang理解结构体指针方法接收者_Golang修改字段实践  MySQL 中使用 IF 和 CASE 实现查询字段的条件转换  Windows怎样关闭Edge新标签页广告_Windows关闭Edge新标签页设置【步骤】  如何在 Go 中可靠地测试含 time.Time 字段的结构体  php怎么下载安装后设置错误日志_phpini log配置教程【汇总】  Win11输入法选字框不见了怎么办_Win11输入法修复与重置【教程】 

 2025-12-26

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.