JavaScript中的this关键字是什么_它的绑定规则有哪些?


this 是 JavaScript 中动态绑定的关键字,其值取决于函数调用方式:默认绑定(非严格→全局对象,严格→undefined)、隐式绑定(obj.method→obj)、显式绑定(call/apply/bind)、new 绑定(优先级最高,指向新实例)及箭头函数(词法继承外层 this)。

this 是 JavaScript 中一个特殊的关键字,它指向函数当前执行时的“执行上下文”中的对象。它的值不是在函数定义时确定的,而是在函数被调用时动态绑定的——也就是说,同一个函数,不同调用方式,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: function() { console.log(this.name); } };
obj.say(); // 'Alice' —— this 指向 obj
const fn = obj.say;
fn(); // undefined(严格模式)或 window.name(非严格)

显式绑定(call、apply、bind)

通过 call()apply()bind() 可以强制指定函数运行时的 this 值:

  • call(obj, arg1, arg2...):立即执行,参数逐个传入
  • apply(obj, [args]):立即执行,参数以数组形式传入
  • bind(obj, arg1, arg2...):返回一个新函数,this 固定为 obj,后续调用时生效

注意:硬绑定(bind)优先级高于隐式绑定;new 调用可覆盖 bind,但普通 call/apply 无法覆盖 new。

new 绑定(构造函数调用)

使用 new 调用函数时,会创建一个新对象,并将 this 绑定到这个新对象上,同时该对象原型指向函数的 prototype。

  • new 调用优先级最高,会覆盖默认、隐式和显式(bind)绑定
  • 箭头函数没有自己的 this,也不可被 new 调用

例如:

function Person(name) { this.name = name; }
const p = new Person('Bob'); // this 指向新创建的 p 实例

箭头函数的 this(词法绑定)

箭头函数不绑定自己的 this,而是**继承外层普通函数作用域中的 this 值**,且该绑定无法被 call/apply/bind 或 new 改变。

  • 适合用于回调、事件处理器等需要保持外层 this 的场景
  • 不能用作构造函数,没有 arguments 和 prototype

例如:

const obj = {
name: 'Charlie',
regular() { setTimeout(function() { console.log(this.name); }, 100); },
arrow() { setTimeout(() => { console.log(this.name); }, 100); }
};
obj.regular(); // undefined(非严格下是 window.name)
obj.arrow(); // 'Charlie'


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


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


相关推荐: Python安全爬虫设计_IP代理池与验证码识别策略解析  如何外贸网站设计-能留住客户提升用户体验!  Mac如何查看电池健康百分比_Mac系统信息电源检测  Python面向对象实战讲解_类与设计模式深入理解  php错误怎么开启_display_errors与log_errors的设置【汇总】  如何在Golang中处理数据库事务错误_回滚和日志记录  Python数据抓取合法性_合规说明【指导】  Windows10如何彻底关闭自动更新_Win10服务与组策略双重禁用  php订单日志怎么记录评价_php记录订单评价日志方法【方法】  微信企业付款回调PHP怎么接收_处理企业付款异步通知数据教程【教程】  C#如何在一个XML文件中查找并替换文本内容  Windows10系统怎么查看显卡驱动_Win10设备管理器驱动更新  c++协程和线程的区别 c++异步编程模型对比【核心】  Win11系统占用空间大怎么办 Win11深度瘦身清理指南【优化】  如何在Golang中写入JSON文件_保存结构体数据到文件  如何使用Golang实现多重错误处理_Golangerror组合与判断方法  短链接怎么自定义还原php_修改解码规则适配需求【汇总】  Win10怎样安装Word样式库_Win10安装Word样式教程【步骤】  Windows系统文件被保护机制阻止怎么办_权限不足错误处理方案  如何使用正则表达式精确匹配最多含一个换行符的 start-end 区段  Win10系统怎么查看显卡温度_Win10任务管理器GPU温度  c++怎么处理多线程死锁_c++ lock_guard与unique_lock锁管理【技巧】  php文件怎么变mp4保存_php输出视频流保存为mp4操作【操作】  Win10如何卸载WindowsDefender_Win10卸载Defender教程【方法】  如何在Windows上设置闹钟和计时器_系统自带的时钟应用全攻略【生活技巧】  mac怎么退出id_MAC退出iCloud账号与Apple ID切换【指南】  Win11怎么关闭系统声音_Win11系统提示音静音设置【详解】  Win11怎么设置桌面图标间距_Windows11注册表IconSpacing修改  c# await 一个已经完成的Task会发生什么  Windows系统时间服务错误_W32Time服务修复与同步教学  php打包exe后无法写入文件_权限问题解决方法【教程】  Win11怎么关闭触摸屏_禁用Win11笔记本触摸屏功能设置【教程】  Windows10系统服务优化指南_Win10禁用不必要服务提升性能  Win11怎么开启游戏工具栏_Windows11 Xbox Game Bar快捷键  Win11怎么设置开机密码_Windows11账户登录选项PIN码  Win11怎么开启专注模式_Windows11时钟应用Focus Session  如何使用Golang写入二进制文件_Golang io Write二进制写入示例  Win10怎么卸载剪映_Win10彻底卸载剪映方法【步骤】  如何在 Go 中创建包含映射(map)的切片(slice)结构  mac怎么安装adb_MAC配置Android ADB开发环境【详解】  Win10怎样安装PPT模板_Win10安装PPT模板教程【步骤】  c++的位运算怎么用 与、或、异或、移位操作详解【底层知识】  手机php怎么转mp4_手机端php文件转mp4app推荐【指南】  Mac如何修改Hosts文件?(本地开发与屏蔽网站)  Windows10电脑怎么设置自动连接WiFi_Win10无线网络属性勾选  Windows如何使用注册表查找和删除项?(regedit教程)  Win11怎么设置任务栏对齐方式_Windows11个性化任务栏行为  Win11怎么更改管理员名字 Win11修改账户名称详细步骤【教程】  Win11怎么更改输入法顺序_Win11调整语言首选位置【设置】  c++获取当前时间戳_c++ time函数使用详解 

 2025-12-30

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

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

点击免费数据支持

提交您的需求,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.