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

张小明 2025/12/30 22:18:55
商业网站的域名代码,网络软文写作,互联网医院建设方案,关键词查询优化掌控 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进行投诉反馈,一经查实,立即删除!

免费制作软件app的网站网站建设 科目

OpenWRT应用商店iStore完全使用手册:从零开始构建智能路由器生态 【免费下载链接】istore 一个 Openwrt 标准的软件中心,纯脚本实现,只依赖Openwrt标准组件。支持其它固件开发者集成到自己的固件里面。更方便入门用户搜索安装插件。The iStor…

张小明 2025/12/28 19:03:32 网站建设

网站怎么做安全长沙网站托管seo优化公司

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个二维码识别效率对比平台,功能包括:1) 上传或生成测试用损坏二维码数据集;2) 并行运行传统算法和AI算法进行识别;3) 可视化展…

张小明 2025/12/28 17:08:30 网站建设

网站宣传册怎么做合肥网站设计服

palera1n作为一款基于checkm8技术开发的iOS越狱工具,专门面向搭载A8至A11芯片以及T2协处理器的苹果设备。该工具支持iOS 15.0及以上版本的操作系统,为老款iOS设备用户提供了系统定制的技术解决方案。 【免费下载链接】palera1n Jailbreak for arm64 devi…

张小明 2025/12/28 19:04:57 网站建设

官方网站建设的目标wordpress 打开慢方法

一、系统出问题不可怕,可怕的是“每次都像第一次”几乎所有企业都会遇到 IT 事件:系统无法访问、业务应用卡顿、权限异常、接口报错、网络不稳定……问题本身并不可怕,真正拉开企业差距的,是面对这些问题时的处理方式。有的企业可…

张小明 2025/12/28 20:44:40 网站建设

南京金九建设集团网站免费ppt模板下载网盘

一、案例背景与项目痛点案例背景:某大型铁矿选矿厂为提高整体生产效率,对其精矿粉输送系统进行自动化升级。项目核心控制系统采用高性能的西门子S7-1500PLC和TIAPortal平台,旨在构建一个统一、集成的控制中心。然而,输送线主驱动电…

张小明 2025/12/28 21:15:35 网站建设

做图片网站咋样网站logo怎么做的

在信息获取日益重要的今天,付费墙绕过工具成为了新闻阅读爱好者的得力助手。这款浏览器扩展能够智能解锁付费内容,让您畅享免费阅读体验。本文将为您提供一份完整的使用攻略,帮助您从零开始掌握这款实用工具。 【免费下载链接】bypass-paywal…

张小明 2025/12/28 21:17:06 网站建设