wordpress小说站数据库提供网站建设和制作

张小明 2026/3/2 21:29:18
wordpress小说站数据库,提供网站建设和制作,简单网站设计,电子商务网站建设前期准备掌控 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进行投诉反馈,一经查实,立即删除!

网站建设服务哪家有网站建设项目单子来源

在现代数据库系统中,内存管理技术是提升查询效率与系统吞吐能力的关键因素。如何高效利用内存资源,合理缓存数据和执行计划,减少磁盘I/O,以及保证事务并发访问的一致性,直接决定数据库性能和用户体验。本文详细介绍Yas…

张小明 2026/3/2 1:51:53 网站建设

企业营销网站模板免费下载注册公司名称查询网站

快速掌握RuoYi-Vue3-FastAPI代码生成器:开发效率提升终极指南 【免费下载链接】RuoYi-Vue3-FastAPI 基于Vue3Element PlusFastAPI开发的一个通用中后台管理框架(若依的FastAPI版本) 项目地址: https://gitcode.com/gh_mirrors/ru/RuoYi-Vue…

张小明 2026/3/1 15:54:29 网站建设

66郑州网站建设昆明如何做百度的网站

如果这篇文章对你有帮助,不妨点个关注,期待与你分享更多! 1.目的 确保质量管理体系的所有文件、资料受控,保持文件的现行有效和保密,特编制本程序。 2.范围 适用于实验室与质量管理体系有关的所有文件的控制。 3.…

张小明 2026/1/7 11:01:32 网站建设

信阳网站推广公司郑州正云网站建设

第一章:跨领域 Agent 的协同机制在复杂分布式系统中,跨领域 Agent 协同机制是实现智能任务分配与资源优化的核心。多个具备独立决策能力的 Agent 需在异构环境中达成共识、协调行为,并动态响应外部变化。这种协同不仅依赖于通信协议的设计&am…

张小明 2026/3/2 16:18:16 网站建设

推荐几个好看的网站网站部署步骤网站开发

BetterTouchTool触控条预设完全指南:从零开始打造个性化MacBook控制中心 【免费下载链接】btt-touchbar-presets BetterTouchTool Touch Bar Presets 项目地址: https://gitcode.com/gh_mirrors/bt/btt-touchbar-presets 还在为MacBook触控条功能单调而苦恼吗…

张小明 2026/3/2 18:13:57 网站建设

网站开发人员有哪些设计logo图案免费

Windows PowerShell 错误处理与调试指南 1. 错误处理 在 Windows PowerShell 中,错误处理是一个重要的环节,许多 cmdlet 支持 ErrorAction 和 ErrorVariable 这两个常见参数,它们在可能出现错误的场景中尤为重要。 1.1 使用 ErrorAction 参数 –errorAction 参数用…

张小明 2026/3/2 21:21:52 网站建设