商业网站的域名代码网络软文写作

张小明 2026/1/9 8:03:11
商业网站的域名代码,网络软文写作,互联网医院建设方案,关键词查询优化掌控 JavaScript 的 this#xff1a;从迷失到精准控制 在 JavaScript 编程中#xff0c;this 是一个看似简单却极易让人困惑的核心概念。许多开发者在使用对象方法、定时器#xff08;如 setTimeout#xff09;或事件回调时#xff0c;常常发现 this 的指向“莫名其妙”地…掌控 JavaScript 的this从迷失到精准控制在 JavaScript 编程中this是一个看似简单却极易让人困惑的核心概念。许多开发者在使用对象方法、定时器如setTimeout或事件回调时常常发现this的指向“莫名其妙”地变了——明明是在对象内部调用的方法结果this却指向了全局对象window甚至在严格模式下变成undefined导致程序报错。这种现象被称为 “this被覆盖” 或 “this丢失”。本文将深入剖析其成因并系统介绍三种主流解决方案bind绑定、that this保存上下文、箭头函数放弃this助你彻底掌握this的命运。一、为什么this会“丢失”要解决问题先理解根源。JavaScript 中的this并非由函数定义的位置决定而是由函数被调用的方式动态绑定的。这一机制在大多数场景下非常灵活但在回调函数中却容易引发意外。考虑以下代码use strict; var name windowName; var a { name: Cherry, func2: function() { setTimeout(function() { console.log(this.name); // ❌ TypeError: Cannot read property name of undefined }, 1000); } }; a.func2();表面上看func2是a的方法内部的this应该指向a。但实际运行时setTimeout内部的匿名函数是以普通函数形式被调用的而非作为a的方法调用。在严格模式下普通函数的this为undefined因此访问this.name会抛出错误。根本原因在于setTimeout接收的是一个函数引用它在未来的某个时刻独立执行该函数此时已脱离原始对象的调用上下文。这就是this“丢失”的本质。二、解决方案一.bind()—— 为this订下“婚约”.bind(obj)是 Function 原型上的方法它会返回一个新函数该函数无论何时、何地被调用其内部的this永远指向传入的obj。这就像为函数和某个对象订下了一纸“婚约”不可更改。var a { name: Cherry, func1: function() { console.log(this.name); }, func2: function() { setTimeout( function() { console.log(this.name); // ✅ 输出 Cherry this.func1(); // ✅ 正常调用 }.bind(a), // 关键永久绑定 this 为 a 3000 ); } }; a.func2();.bind()的优势在于精确且持久。即使这个函数被多次传递、嵌套调用this依然坚如磐石。此外你可以提前绑定并复用const boundFunc a.func1.bind(a); setTimeout(boundFunc, 1000); // 甚至可以作为事件处理器 button.addEventListener(click, boundFunc);需要注意的是.bind()不会立即执行函数只是返回一个“绑好this”的新函数因此非常适合用于setTimeout、事件监听等延迟调用场景。三、解决方案二that this—— 借助作用域链“记住”上下文在 ES6 之前这是最经典的解决方案。其核心思想是利用闭包在外层函数中将this赋值给一个变量通常命名为that或self内层函数通过作用域链访问该变量。var a { name: Cherry, func2: function() { var that this; // 保存当前 this即 a setTimeout(function() { console.log(that.name); // ✅ 输出 Cherry that.func1(); // ✅ 正常调用 }, 3000); }, func1: function() { console.log(this.name); } }; a.func2();这种方法依赖于 JavaScript 的词法作用域规则内部函数可以访问外部函数的变量。由于that是一个普通变量不受调用方式影响因此能稳定地指向原始对象。虽然略显冗余需额外声明变量但that this兼容性极佳ES3 起支持逻辑直观在老项目或不支持 ES6 的环境中仍是可靠选择。四、解决方案三箭头函数 —— 主动“放弃”自己的thisES6 引入的箭头函数Arrow Function从根本上改变了this的行为箭头函数没有自己的this。它的this继承自外层作用域词法作用域由定义位置决定而非调用方式。var a { name: Cherry, func2: function() { // 此处 this 指向 a因为 a.func2() 调用 setTimeout(() { console.log(this.name); // ✅ 输出 Cherry继承自 func2 的 this this.func1(); // ✅ 正常调用 }, 3000); }, func1: function() { console.log(this.name); } }; a.func2();箭头函数的简洁性和确定性使其成为现代 JavaScript 开发的首选。尤其在 React 等框架中事件处理函数常用箭头函数避免this问题。但需警惕一个常见误区不要在对象字面量中用箭头函数定义方法var bad { name: Bad, getName: () { console.log(this.name); // ❌ this 指向外层可能是 window不是 bad } };因为对象字面量本身不构成块级作用域箭头函数的this会向上查找很可能指向全局对象。五、三种方案对比与选型建议方案原理优点缺点适用场景.bind()返回新函数永久绑定 this精确控制可复用不影响原函数需显式调用稍显啰嗦事件回调、工具函数、需多次复用的场景that this利用闭包保存引用兼容性好ES3逻辑清晰需额外变量代码冗余老项目维护、不支持 ES6 的环境箭头函数无 this继承外层词法作用域代码简洁现代标准自动绑定不能用于对象方法定义无 arguments回调函数、React/Vue 事件处理、现代项目六、结语this的“丢失”并非语言缺陷而是 JavaScript 动态绑定机制在特定场景下的自然表现。理解其原理后我们完全可以通过合理的设计主动掌控它。无论是用.bind()订下“婚约”用that this留下“备忘录”还是用箭头函数选择“随父姓”每种方案都有其适用场景。作为开发者关键不在于记住语法而在于理解机制、权衡利弊、选择最适合当前上下文的工具。当你能自如地在三种方案间切换时this将不再是你的敌人而是你构建健壮应用的得力助手。记住this的命运始终掌握在你手中。原文 https://juejin.cn/post/7584742635485052938
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

上海技术公司做网站施工企业安全培训心得体会100字

雷达降雨估计在水文学中的应用 雷达降雨数据的优势与应用 雷达在测量降雨模式时,不仅能获取空间信息,还能记录随时间的变化。每次雷达旋转,都会得到更新后的降雨模式。将这些数据按时间序列排列,就能描绘出风暴的演变过程,包括其增强、衰减,以及接近、经过和离开感兴趣…

张小明 2026/1/7 13:23:03 网站建设

海南住房建设厅定额网站线上推广产品

当 idf.py 不再是文件:一文讲透 ESP-IDF 升级后路径失效的根源与破局之道 你有没有在某次更新完 ESP-IDF 后,突然发现原本好好的项目构建脚本崩了?终端里赫然跳出这行红字: the path for esp-idf is not valid: /tools/idf.py …

张小明 2026/1/4 21:44:34 网站建设

蚌埠网站建设文章域名备案迁移

文章目录一、锁的基本概念:为什么需要锁?二、锁的分类体系三、核心锁机制深度剖析1. 悲观锁 vs 乐观锁2. synchronized的锁升级过程3. 读写锁(ReadWriteLock)4. 自旋锁四、数据库锁机制1. 行锁 vs 表锁2. 间隙锁(Gap L…

张小明 2026/1/4 10:25:45 网站建设

海南网站制做的公司网站顶部下拉广告代码

您的组织是否有能力防御日益增多的网络攻击?渗透测试是评估组织 IT 和安全基础设施的最佳方法之一,因为它可以识别网络和系统中的漏洞。未修补的漏洞是对网络犯罪分子的公开邀请。 美国国家标准与技术研究院 (NIST) 2021 年发现了 4,068 个高风险漏洞。…

张小明 2026/1/4 17:39:41 网站建设

易用的做网站软件南通海洲建设集团网站

AI Agent无疑是近几个月AI领域最炙手可热的话题之一。事实上,过去几年间,围绕Agent的研究与开发已经取得了突飞猛进的进展,大量成果涌现,为我们提供了丰富的知识储备和实践资源。 但面对如此快速的进展,我们该如何快速…

张小明 2026/1/4 17:08:13 网站建设

网站编辑 seo河北网络科技公司有哪些

如何让 jscope 跑出 100kSPS?一次实战调试的深度复盘在做电机控制的时候,你有没有遇到过这种情况:PI 参数怎么调都不稳,怀疑是电流环响应太快,串口打印的数据却只有几千赫兹,根本看不出瞬态细节&#xff1f…

张小明 2026/1/8 4:25:47 网站建设