j*ascript的this指向谁_它的绑定规则有哪些容易混淆的地方?


J*aScript中this指向由调用上下文决定,遵循四条绑定规则:new绑定>显式绑定>隐式绑定>默认绑定;隐式绑定易因函数提取而丢失this;bind绑定可被new覆盖;箭头函数无this,继承外层词法作用域;默认绑定在严格模式下为undefined。

javascript的this指向谁_它的绑定规则有哪些容易混淆的地方?

J*aScript 中的 this 指向谁,不取决于函数定义的位置,而取决于**函数调用时的上下文**。它有四条核心绑定规则,优先级从高到低是:new 绑定 > 显式绑定(call/apply/bind)> 隐式绑定(对象方法调用)> 默认绑定(独立调用)。容易出错的地方,往往就藏在这几条规则的交界或特殊场景里。

隐式绑定失效:丢失 this 的常见操作

当一个本该作为对象方法被调用的函数,被“提取”出来单独使用时,this 就会丢失,退回到默认绑定(非严格模式下是全局对象,严格模式下是 undefined)。

  • 典型场景:把对象方法赋值给变量、传入回调(如 setTimeout、addEventListener)、解构赋值
  • 例子:const obj = { name: 'Alice', say() { console.log(this.name); } }; const fn = obj.say; fn(); // undefined(严格模式)
  • 解决办法:用箭头函数包裹、用 bind 固定、改写为 obj.say() 直接调用、或用 class 字段语法 + 箭头函数(React 常见)

显式绑定被 new 覆盖:bind 后还能被 new 吗?

Function.prototype.bind 创建的绑定函数,如果被 new 调用,会忽略 bind 时指定的 this,转而构造新实例——此时 this 指向新生成的对象。这是很多人没意识到的“例外”。
例如:const bound = originalFunc.bind({x: 1}); const inst = new bound(); // this 在 originalFunc 内指向 inst,不是 {x: 1}

  • bind 返回的函数内部做了判断:如果是 new 调用,就用新对象;否则才用绑定的 this
  • 所以 bind 并不能完全“锁定”this,在构造函数场景下会被覆盖
  • 想彻底禁止 new 调用,得手动在函数内检测 this instanceof originalFunc

箭头函数没有自己的 this:它继承外层作用域

箭头函数不遵循上述四条绑定规则,它没有自己的 this,而是沿作用域链向上查找,捕获定义时所在函数的 this 值(词法绑定)。这既是优势,也是陷阱。

芝士饼 芝士饼

芝士饼是一个一站式AI原生应用开发平台,简单几步即可完成应用的创建与发布。

芝士饼 92 查看详情 芝士饼

立即学习“J*a免费学习笔记(深入)”;

  • 好处:天然解决事件回调、定时器中 this 丢失问题(不用 bind 或 _this = this)
  • 陷阱:不能用 call/apply/bind 改变它的 this;也不能作为构造函数(会报错);在对象字面量方法中写箭头函数,this 不指向该对象,而是外层(比如模块顶层的 this 是 module.exports)
  • 例子:const obj = { name: 'Bob', log: () => console.log(this.name) }; obj.log(); // undefined(因为外层 this 不是 obj)

默认绑定的“静默失败”:严格模式 vs 非严格模式

函数独立调用(如 foo())时,若没被任何规则捕获,就进入默认绑定。这个行为在两种模式下完全不同:

  • 非严格模式下,this 指向全局对象(浏览器是 window,Node 是 global)——看似“正常”,实则容易掩盖 bug
  • 严格模式下,thisundefined,一访问属性就立即报错(如 this.name → Cannot read property 'name' of undefined)
  • 现代项目基本都开启严格模式(模块默认严格),所以看到 undefined 更常见,也更安全

基本上就这些。掌握这四条规则和它们的冲突点,再配合 Chrome DevTools 的 debugger 和 console.log(this),就能稳住 this 的指向。不复杂但容易忽略细节。

以上就是j*ascript的this指向谁_它的绑定规则有哪些容易混淆的地方?的详细内容,更多请关注其它相关文章!


# react  # javascript  # 如何实现  # 模式下  # 芝士  # 绑定  # 作用域  # win  # app  # 浏览器  # node  # java  # 淄博页面seo推广  # 贵溪网站开发建设  # 四条  # 长春seo助手打造店铺  # 天河手机网站推广哪家好  # 一台服务器放多少网站不利于优化  # 回调  # 报错  # 隐式  # 有哪些  # 自己的  # seo指标  # 济南营销网络推广代理商  # 海南seo服务  # 中国seo系统代理项目平台  # 一站式网络推广营销 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: Win11如何分屏操作_Win11多窗口分屏技巧  Lar*el怎么实现全文搜索_Lar*el Scout集成Algolia教程  J*a中导出MySQL表为SQL脚本的两种方法  更换小红书群背景怎么换?小红书群规则怎么设置?  《画加》约稿流程  电脑开不了机怎么办 电脑无法开机的解决方法  哔哩哔哩黑名单怎么查看  钉钉任务无法提醒如何处理 钉钉任务提醒优化方法  word页码灰色不能用如何解决  稻壳阅读器官方直达网址链接 稻壳阅读器文档阅读平台主页资源入口  鲨鱼剧场app金币获取方法  电脑“无法访问指定设备、路径或文件”怎么办?五种权限设置方法  优化响应式标题底部边框:CSS实现技巧与最佳实践  如何在CSS中使用伪类选择器_hover实现悬停效果  win11如何运行chkdsk命令 Win11检查和修复磁盘逻辑错误教程【修复】  行者app怎样导出日志  《蓝色星原:旅谣》坐骑获取攻略  微信朋友圈怎么设置三天可见 微信朋友圈设置指定天数可见步骤【教程】  解决Go encoding/json 将JSON大数字解析为浮点数的问题  如何在CSS中清除浮动解决背景颜色不包裹内容问题_clear after技巧  安居客移动经纪人怎么设置自动回复?-安居客移动经纪人设置自动回复的方法  网站体验不好=浪费钱:如何提升-用户体验效果差  C++ static关键字作用_C++静态成员变量与静态函数  《腾讯相册管家》注销账号方法  mysql中如何分析索引使用情况_mysql索引使用分析方法  《百果园》充值余额方法  CDR如何复制交互式填充色  视频号视频怎么提取文案?提取的文案如何优化与使用?  《宝可梦大集结》S4冠军之路开始时间介绍  暴风影音官网正式版_暴风影音手机版官网下载安卓  如何测试您的网站全球打开速度-网站海外测速工  食品生产用水只要符合国家规定的生活饮用水卫生标准就可以吗  vivo云服务一直提示空间不足怎么办 怎么办vivo云服务老是提示空间不足  sublime怎么在文件中显示代码结构大纲_sublime符号列表功能  企查查官网和爱企查 企查查企业查询官网入口  智学网成绩单查询系统网_智学网学生平台登录  太平年在哪个平台播出  Vue 3中独立响应式实例的创建与应用  铁路12306座位怎么选_12306官方选座操作方法  《幻兽帕鲁》手游帕鲁捕捉技巧分享  网页版网易云音乐入口_网易云音乐在线官网登录  《爱笔思画x》涂色教程  感染了幽门螺杆菌一定会导致胃癌吗?蚂蚁庄园今日答案最新11.30  uc浏览器官网网页版使用 uc浏览器官网免费在线首页  《优志愿》修改手机号方法  PPT页面尺寸怎么修改 PPT自定义幻灯片大小与方向设置【教程】  win11怎么更改账户类型 Win11标准用户和管理员权限切换【教程】  《饿了么》拼好饭点外卖教程2025  汽水音乐车机版官网5.0 汽水音乐车机版5.0版本下载入口  Golang如何使用gRPC拦截器实现日志收集_Golang gRPC拦截器日志收集实践 

 2025-12-18

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

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

点击免费数据支持

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

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@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.