js:关于箭头函数this指向和bind
1.bind方法注意事项调用 f.bind(someObject) 会创建一个新函数这个新函数具有与f相同的函数体和作用域但this的值永久绑定到bind的第一个参数无论函数如何被调用。function f() { return this.a; } const g f.bind({ a: azerty }); console.log(g()); // azerty const h g.bind({ a: yoo }); // bind 只能生效一次 console.log(h()); // azerty const o { a: 37, f, g, h }; console.log(o.a, o.f(), o.g(), o.h()); // 37 37 azerty azerty2.关于箭头函数this函数是作为箭头函数的形式创建的所以它的this永久地绑定到其执行上下文中的thisconst obj { getThisGetter() { const getter () this; return getter; }, }; const fn obj.getThisGetter(); console.log(fn() obj); // true这个例子意思是getter里的this永远指向的是其执行上下文getThisGetter的this就是obj由于类体具有this上下文因此作为类字段的箭头函数会关闭类的this上下文箭头函数体中的this将正确指向实例对于静态字段来说是类本身。但是由于它是一个闭包而不是函数本身的绑定因此this的值不会根据执行上下文而改变。class C { a 1; autoBoundMethod () { console.log(this.a); }; test(){ console.log(this.a) } } const c new C(); c.autoBoundMethod(); // 1 const { autoBoundMethod } c; autoBoundMethod(); // 1 c.test() // 1// 如果调用类的普通函数此时应该是 undefined,因为class类是严格模式function a () { var a 9; return function b() { var b4; return () {console.log(this)} } } a()()();// window或严格模式下的undefined这里箭头函数this指向的是函数b的thisconst obj { name: 1, a: { name: 2, foo: function() { console.log(this); // 这里的 this 是 obj.a }, too: () console.log(this) // 这里的 this 是全局对象window 或 undefined } }; obj.a.foo(); // this指向的是obj.a obj.a.too(); // 输出全局对象或 undefined严格模式下 这里的too的this指向的obj的上下文为全局 注意 箭头函数的的上下文是属性和方法时候this指向是不同的 上下文是普通函数时候指向取决于函数的调用 上下文为属性时候this指向obj所坐在的作用域为全局作用域const obj { name: 1, a: { name: 2, foo: function() { console.log(this); // 这里的 this 是 obj.a }, too: () console.log(this), // 这里的 this 是全局对象window 或 undefined roo() { const test () {console.log(this)}; return test; } } }; const roo obj.a.roo; roo()(); //指向window const roo obj.a.roo(); roo(); //指向obj.a;总结普通函数 的this是调用时决定的谁调用就指向谁。箭头函数 的this是定义时决定的继承外层作用域的this。const obj { name: Obj, init: function() { console.log(1. init this:, this.name); // 场景 A: bind 返回的新函数 const boundFn (function() { console.log(2. inner regular this:, this.name); }).bind(this); // 场景 B: 箭头函数 const arrowFn () { console.log(3. arrow this:, this.name); }; return { boundFn, arrowFn, // 场景 C: 普通方法 normalMethod: function() { console.log(4. normal method this:, this.name); } }; } }; // 第一步获取内部对象 const internalObj obj.init(); // 第二步分别调用 internalObj.boundFn(); internalObj.arrowFn(); internalObj.normalMethod(); // 第三步高阶陷阱 - new 与 bind/arrow 的对抗 const NewBound new internalObj.boundFn(); const NewArrow new internalObj.arrowFn(); // 注意这行代码是否合法 1. init this: Obj 2. inner regular this: Obj 3. arrow this: Obj 4. normal method this: undefined (或者报错取决于 strict mode通常面试题默认非严格或模块外为 undefined/window) // 修正在现代模块环境或严格模式下normalMethod 独立调用时 this 为 undefined访问 undefined.name 会报错 TypeError。 // 但如果是浏览器非严格模式全局调用this 指向 window输出 window.name (通常为空字符串)。 // 为了严谨我们假设在标准 ES Module 或严格模式下 // 4. normal method this: 报错 (Cannot read properties of undefined) // 但如果题目隐含是在浏览器控制台直接运行且非严格 // 4. normal method this: (空字符串因为 window.name 默认为空) // 关于 new 的部分 // NewBound 执行时 // 2. inner regular this: Obj (bind 绑定的 this 在 new 调用时依然有效吗见下文解析) // NewArrow 执行时 // 报错: internalObj.arrowFn is not a constructor这是一道结合了 ‌new绑定优先级‌、‌bind的不可变性‌、‌箭头函数词法作用域‌以及‌执行上下文‌的高级综合面试题。这道题能全面考察候选人对 JavaScriptthis机制底层逻辑的理解深度。‌New 最高Bind 次之隐式再次默认兜底。‌‌箭头无this看外层New 调 Bindthis失效。

相关新闻

TurboQuant+ 对 DFlash 自草稿投机解码的 31 组实验调查:GDN 混合架构的验证瓶颈、tape-replay 回滚与可行路径

TurboQuant+ 对 DFlash 自草稿投机解码的 31 组实验调查:GDN 混合架构的验证瓶颈、tape-replay 回滚与可行路径

【免费下载链接】turboquant_plus 项目地址: https://gitcode.com/gh_mirrors/tu/turboquant_plus 点击查看 免费下载 本文基于 TurboQuant 仓库研究文档《Speculative Decoding on GDN Hybrid Architectures: A 31-Experiment Investigation》整理。核心主题是&am…

2026/10/9 1:21:56 阅读更多 →
Dinero.js 金额变更(Mutations)深入指南:加减乘与分配的不变式与源码实现

Dinero.js 金额变更(Mutations)深入指南:加减乘与分配的不变式与源码实现

金融科技 【免费下载链接】dinero.js Create, calculate, and format money in JavaScript and TypeScript 项目地址: https://gitcode.com/gh_mirrors/di/dinero.js 点击查看 免费下载 导读 本文聚焦 Dinero.js 中用于操作(变更)货币金额的…

2026/10/9 1:21:56 阅读更多 →
Docker入门与实战——端口映射与容器互联

Docker入门与实战——端口映射与容器互联

端口映射与容器互联1、通过端口映射实现容器访问1.1、从外部访问容器应用1.2、映射所有端口地址1.3、映射到指定地址的指定端口1.4、映射到指定地址的任意端口1.5、查看映射端口配置2、通过互联机制实现便捷互访2.1、自定义容器命名2.2、容器互联在前几章的学习过程中&#xff…

2026/10/9 1:21:56 阅读更多 →

最新新闻

使用 LLM 为 ProxySQL 编写高质量增强版发布说明(Enhanced Release Notes)实战指南

使用 LLM 为 ProxySQL 编写高质量增强版发布说明(Enhanced Release Notes)实战指南

后端数据库负载均衡 【免费下载链接】proxysql High-performance proxy for MySQL and PostgreSQL 项目地址: https://gitcode.com/gh_mirrors/pr/proxysql 点击查看 免费下载 本文档是 ProxySQL 仓库中发布说明生成工作流的核心提示词模板 —— enhanced_prompt_t…

2026/10/9 1:48:13 阅读更多 →
video-shotcraft 协作光标编排:dialogue-duet 与 cast-ensemble 两式光标的 Remotion 实现解析

video-shotcraft 协作光标编排:dialogue-duet 与 cast-ensemble 两式光标的 Remotion 实现解析

AI 技能媒体生成视频 【免费下载链接】video-shotcraft AI video skill for Claude Code & Codex — cinematic product videos with Remotion: 152 shot recipe cards, 209 motion previews, a production-ready template 项目地址: https://gitcode.com/gh_mi…

2026/10/9 1:48:13 阅读更多 →
FreeRtos——15、查看freeRTOS堆栈使用情况——非常重要

FreeRtos——15、查看freeRTOS堆栈使用情况——非常重要

在使用freeRTOS做多任务的时候,总是担心任务会出现Bug,导致任务死机或其他异常情况,这些很多都是由于堆栈分配不合理出现的问题,那就要了解每个任务的堆栈使用情况。FreeRTOS 本身提供了专门的 API 来监控堆栈使用,核心…

2026/10/9 1:48:13 阅读更多 →
物联网开发全链路能力拆解:从设备端到云端的五大关键环节

物联网开发全链路能力拆解:从设备端到云端的五大关键环节

这几年做物联网定制项目,感触最深的一件事是:绝大多数客户对"物联网开发"的理解是破碎的。有人以为买个模组、写个固件、连上Wi-Fi就万事大吉;有人觉得只要找到能画PCB的硬件工程师,剩下的云端、APP、运维都能用现成平台…

2026/10/9 1:48:13 阅读更多 →
ESP32+GY-30光照传感器入门:I2C通信与Arduino实战教程

ESP32+GY-30光照传感器入门:I2C通信与Arduino实战教程

1. 项目概述:为什么我推荐从光照传感器开始玩ESP32很多朋友第一次接触ESP32,第一反应就是“我能用它做什么”。点灯太简单,做物联网又怕一步到位学不会,这时候一个“看得见反馈”的传感器项目就是最好的过渡。GY-30光照传感器就是…

2026/10/9 1:48:13 阅读更多 →
AI日报从0到1:筛选逻辑、工具链配置与90分钟生产流程

AI日报从0到1:筛选逻辑、工具链配置与90分钟生产流程

1. AI日报这个栏目到底在做什么做AI日报这件事,我从2024年底开始坚持到现在,中间断更过两次,一次是因为信息源太杂导致筛选成本失控,一次是因为写得太像新闻通稿自己都不想看。后来我把整个流程重新拆了一遍,才找到可持…

2026/10/9 1:47:12 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 13:34:55 阅读更多 →