js箭头函数的this

结论

  1. 箭头函数没有自己的this
  2. 箭头函数的this取决于父级的作用域
  3. 箭头函数的this在函数定义的时候就已经确定了,但是普通函数的this是在运行的时候才能确定的,因为要看是谁调用它的;所以箭头函数的this不会受到调用方式的影响,是静态的this
  4. 一般来说,箭头函数的this是不会被改变的,注意,用call apply bind等方法也不能修改箭头函数this的指向

具体解释

箭头函数的 this 是在函数定义时确定的,并且是词法上下文(Lexical Context)中的 this 值。

具体来说,箭头函数的 this 值取决于箭头函数所在的父级作用域中 this 的值,而不是箭头函数被调用时的调用者。这意味着无论如何调用箭头函数,其 this 都会保持不变,始终指向定义时所在的作用域的 this。

这与普通函数不同,普通函数的 this 值在运行时才确定,并且取决于函数被调用时的上下文。因此,普通函数的 this 可能会因为调用方式的不同而发生变化,而箭头函数的 this 则不会受调用方式的影响。

总之,箭头函数的 this 是静态的,由它所在的词法作用域决定,这使得箭头函数在访问外部作用域的变量和方法时更加方便和可靠。

非要改变箭头函数的this也有方法

当你使用箭头函数时,它的 this 关键字的指向是在定义时确定的,而不是在运行时确定的,这与普通函数有所不同。箭头函数的 this 会捕获其所在上下文的 this 值,而不是创建自己的 this。这就意味着无法通过 call()、apply() 或 bind() 来改变箭头函数的 this 指向。

如果你需要在箭头函数中改变 this 的指向,你可以使用一些技巧或者在箭头函数外部定义一个变量来保存正确的 this。下面是一些常见的方法:

  1. 使用闭包或嵌套函数:在箭头函数外部定义一个变量,然后在箭头函数内部引用这个变量,这样就可以访问正确的 this。
function MyClass() {this.value = 42;// 使用箭头函数this.method = () => {console.log(this.value);};
}const obj = new MyClass();
const method = obj.method;method(); // 输出: 42
  1. 使用 bind():虽然箭头函数本身不能使用 bind() 方法改变 this 指向,但是你可以在箭头函数外部定义一个函数,然后使用 bind() 来改变这个函数的 this 指向,然后再传递给箭头函数。
function sayHello() {console.log(this.name);
}const obj = {name: 'Alice'
};// 使用 bind() 将 sayHello 函数的 this 绑定到 obj
const boundFunc = sayHello.bind(obj);// 使用箭头函数调用绑定后的函数
const arrowFunc = () => {boundFunc();
};arrowFunc(); // 输出: Alice

这些方法可以根据你的需求来选择。要记住的关键是理解箭头函数的特性,以及如何利用其特性来管理 this 指向。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.tpcf.cn/web/3861.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【U+】U+智享版运维平台账号密码重置

【问题描述】 友加畅捷系列中的U智享版软件, 系统运维平台账号admin密码忘记了,无法登录。 【解决方法】 在软件的安装目录下,找到sysconfig_accounts文件,并删除。 【路径:X:\U系列软件\U智享版\WebSite\config\】 …

【ZZULIOJ】1082: 敲7(多实例测试)(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 输出7和7的倍数,还有包含7的数字例如(17,27,37...70,71,72,73...) 输入 首先输入一个整数t&#xff…

制造业企业做图纸的怎么才能做好cad加密,什么cad加密软件最好?

众所周知,通常CAD图纸中包含着大量的设计数据和产品信息,所以无论对于CAD设计工程师,还是对于企业,如何保障CAD图纸信息数据安全都是十分重要的。 很多企业通过购买第三方安全软件来加密保护CAD设计图纸,但第三方安全软…

【算法基础实验】图论-UnionFind连通性检测之quick-union

Union-Find连通性检测之quick-union 理论基础 在图论和计算机科学中,Union-Find 或并查集是一种用于处理一组元素分成的多个不相交集合(即连通分量)的情况,并能快速回答这组元素中任意两个元素是否在同一集合中的问题。Union-Fi…

AI技术宝库:一键收藏全球最全面的人工智能资源网站

1、KKAI(kk.zlrxjh.top) R5AI是一种融合了星火大模型与文心大模型的知识增强型大语言模型,主要聚焦于自然语言处理(NLP)的技术开发。 该模型具有卓越的语义理解和文本生成能力,可以有效处理多种复杂的自然语…

python爬虫-----深入了解 requests 库下篇(第二十六天)

🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天…

M-LAG的基本概念

如图所示,用户侧设备Switch(可以是交换机或主机)通过M-LAG机制与另外两台设备(SwitchA和SwitchB)进行跨设备链路聚合,共同组成一个双活系统。这样可以实现SwitchA和SwitchB共同进行流量转发的功能&#xff…

MySQL查出时间比实际晚8小时的解决方案

查询出来的日期数据比数据库中日期数据晚8小时,一开始很懵逼,IDEA 和 server 时区都一样呢!后来发现: jdbcUrljdbc:mysql://localhost:hentai?useUnicodetrue&characterEncodingUTF-8&useJDBCCompliantTimezoneShifttru…

C++11单例模式

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,linux 🔥座右铭:“不要等到什么都没有了…

16(第十五章,数据管理成熟度评估)

目录 概述 数据管理成熟度等级 基本概念 评级等级以及特点 现有的DMMA框架 活动 方法 扩展 概述 数据管理成熟度等级 1) 0 级。无能力级。2) 1 级。初始级或临时级:成功取决于个人的能力。3) 2 级。可重复级:制定了最初级的流程规则。4) 3 级。…

【webrtc】m114自己实现的PrioritizedPacketQueue及优先级处理

G:\CDN\WEBRTC-DEV\libwebrtc_build\src\modules\pacing\prioritized_packet_queue.h跟m98不同 :webrtc】m98 RoundRobinPacketQueue的优先级处理,m114直接使用taskqueue顺序处理了。甚至自己实现了优先级队列感觉简化了实现,更为清晰 易读,但是去掉了码率低就优先的逻辑。1…

C 语言实例 - 两个浮点数相乘

输入两个浮点数&#xff0c;计算乘积。 #include <stdio.h>int main() {float num1, num2, product;printf("请输入第一个浮点数: ");scanf("%f", &num1);printf("请输入第二个浮点数: ");scanf("%f", &num2);product …

企业计算机服务器中了rmallox勒索病毒怎么办?Rmallox勒索病毒解密流程工具

在网络飞速发展的时代&#xff0c;企业离不开网络&#xff0c;网络为企业的生产运营提供了极大便利&#xff0c;加快了企业进步的步伐&#xff0c;依靠网络可以开展各项工作业务&#xff0c;通过网络数据整合&#xff0c;可以更方便企业办公。网络在为企业提供便利的同时也为企…

ESLint 、 e2e test 学习

Lint和Format的区别&#xff1a; Lint只会告诉你代码中的错误或者不符合规范的地方&#xff0c;而Format是用来对格式作调整的 HTML/tpl&#xff1a;HTMLLint CSS/SCSS&#xff1a;Stylelint JS/JSX&#xff1a;Eslint JSLint&#xff1a;古老&#xff0c;不能配置和扩展JSHin…

【C++类和对象】日期类的实现

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

Post请求中常见的Content-Type类型

Post请求中常见的Content-Type类型的结构 &#xff08;1&#xff09;application/x-www-form-urlencoded 这是浏览器原生的form表单类型&#xff0c;或者说是表单默认的类型。 下面是一个请求实例&#xff1a; 请求报文&#xff1a; 可以看得出&#xff0c;post将请求参数以k…

搭建vue3组件库(一):Monorepo架构搭建

文章目录 1. 以 pnpm 构建 monorepo1.1 全局安装 pnpm1.2 配置 pnpm 的 monorepo 工作区1.3 仓库项目内的包相互调用1.4 TypeScript 初始化配置文件2. 通用配置文件2.1 添加 .editorconfig 编辑器格式配置文件2.2 添加 .gitignore git 忽略文件2.3 添加 .npmrc npm配置文件2.4 …

两个列表联动修改选中标题的时机

在iOS UI中&#xff0c;常常遇到这种场景&#xff0c;就是我们有两个列表&#xff0c;一个 列表是标题&#xff0c;一个列表是分区的内容&#xff0c;我们滚动内容列表的时候&#xff0c;需要选中当前内容列表中对应的标题&#xff0c; 这个时候&#xff0c;我们有多种实现方案…

了解时间复杂度和空间复杂度

在学习数据结构前&#xff0c;我们需要了解时间复杂度和空间复杂度的概念&#xff0c;这能够帮助我们了解数据结构。 算法效率分为时间效率和空间效率 时间复杂度 一个算法的复杂度与其执行的次数成正比。算法中执行基础操作的次数&#xff0c;为算法的时间复杂度。 我们采…

网络安全实训Day23

网络空间安全实训-渗透测试 文件上传攻击 定义 将Webshell文件上传到网站服务器上&#xff0c;从而获得网站整台服务器控制权限的攻击方式 Webshell 一种以网页形式存在的命令行执行环境&#xff0c;又称网页木马 分类 一句话木马 只有一行代码&#xff0c;功能强大&#xff…