当前位置: 首页 > news >正文

箭头函数的this指向谁

先看1个重要原则:

        由Vue管理的函数,一定不要写箭头函数,箭头函数的this就不再是Vue实例了

箭头函数的 this 指向在定义时确定,继承自外层作用域(即定义时的上下文)的 this,且无法通过 callapply  或  bind 改变。以下是关键点总结:

1. 词法作用域的 this

  • 箭头函数没有自己的 this,它使用外层非箭头函数作用域的 this 值。若外层没有函数,则指向全局对象(如 window 或 global)。

  • 示例

    const obj = {value: 42,getValue: function() {// 普通函数中的 this 指向 objconst arrowFn = () => this.value;return arrowFn();}
    };
    console.log(obj.getValue()); // 输出 42

    2. 与普通函数的区别

  • 普通函数this 由调用方式决定(如对象方法、构造函数、事件监听等)。

  • 箭头函数this 固定为定义时的外层 this

  • 示例对比

    // 普通函数(this 指向调用者)
    const obj1 = {value: 10,fn: function() { console.log(this.value); }
    };
    setTimeout(obj1.fn, 100); // 输出 undefined(this 指向全局)// 箭头函数(this 继承外层)
    const obj2 = {value: 10,fn: function() {setTimeout(() => console.log(this.value), 100); // 继承外层 this(obj2)}
    };
    obj2.fn(); // 输出 10

    3. 无法通过绑定方法修改

  • 使用 callapply 或 bind 无法改变箭头函数的 this

  • 示例

    const outerThis = { name: "Outer" };
    const arrowFn = () => console.log(this.name);
    arrowFn.call({ name: "New" }); // 输出 "Outer"(若外层 this 指向全局则可能输出 undefined)

    4. 对象字面量中的陷阱

  • 对象字面量不创建作用域,内部箭头函数的 this 指向全局。

  • 示例

    const obj = {value: "Hello",getValue: () => console.log(this.value) // this 指向全局(如 window)
    };
    obj.getValue(); // 输出 undefined(假设外层为全局)

    5. 在构造函数中的行为

  • 箭头函数作为构造函数会报错(不能 new)。

  • 但若在构造函数内定义,箭头函数会继承实例的 this

    function Person() {this.age = 0;setInterval(() => {this.age++; // this 指向 Person 的实例}, 1000);
    }
    const p = new Person(); // age 每秒自增

    6.总结

  • 箭头函数的 this:继承自定义时的外层作用域,且不可更改。

  • 使用场景:需要固定 this 时(如回调、事件处理、setTimeout)。

  • 避免场景:需要动态 this 时(如对象方法、构造函数)。

通过理解箭头函数的词法 this 特性,可以更灵活地控制代码中的上下文绑定。

    相关文章:

    箭头函数的this指向谁

    先看1个重要原则: 由Vue管理的函数,一定不要写箭头函数,箭头函数的this就不再是Vue实例了 箭头函数的 this 指向在定义时确定,继承自外层作用域(即定义时的上下文)的 this,且无法通过 call、app…...

    【愚公系列】《Python网络爬虫从入门到精通》012-字符串处理

    标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…...

    【Python】01-基础

    目录 1、命令行简介1.1 命令行结构1.2 常用dos指令 2、环境变量2.1 查看2.2 添加2.3 修改2.4 删除 3、path环境变量4、进制5、文本文件和字符集6、Sublime使用 1、命令行简介 命令行就是文本交互页面,通过命令行可以使用指令来操作计算机 1.1 命令行结构 版本及版…...

    Java-DFS(深度优先搜索)

    原理 深度优先搜索的基本思路是从一个节点开始,依次访问它的每一个邻居节点,直到达到一个没有未被访问的邻居的节点为止。这个过程可以使用递归或者栈来实现。其特点是尽可能深入每一个分支,然后再回溯。 DFS算法常用于解决以下类型的问题&…...

    AI大模型编程能力对比:DeepseekClaudeGemini

    在当今快速发展的技术领域,人工智能(AI)模型在编程和数据处理方面的应用越来越广泛。不同的AI模型因其独特的设计理念和技术优势,适用于不同的编程任务和场景。 本文将对三种主流的AI模型——DeepSeek v3、Gemini Flash 2.0 和 C…...

    用C++实现点到三角形最小距离的计算

    1、全部代码 #include <iostream> #include <cmath> #include <array> #include <algorithm>// 二维点结构体 struct Point2D {double x, y;Point2D(double x 0, double y 0) : x(x), y(y) {} };// 计算点到线段的最小距离 double pointToSegmen…...

    解决前后端日期传输因时区差异导致日期少一天的问题

    前端处理 1. 发送日期字符串而非时间戳 在前端使用日期选择器&#xff08;如 el-date-picker&#xff09;获取日期后&#xff0c;将日期转换为特定格式的字符串&#xff08;如 YYYY-MM-DD&#xff09;发送给后端&#xff0c;避免直接发送带有时区信息的时间戳或日期对象。这样…...

    mmsegmentation自己的数据集+不同网络的config配对

    比如说我们要用这个网络&#xff1a; 我们发现他内部继承了很多类&#xff0c;要想配对我们的数据集&#xff0c;就要进行父类的修改。 ../_base_/models/deeplabv3_unet_s5-d16.py, ../_base_/datasets/drive.py,../_base_/default_runtime.py, ../_base_/schedules/schedule…...

    Golang官方编程指南

    文章目录 1. Golang 官方编程指南2. Golang 标准库API文档 1. Golang 官方编程指南 Golang 官方网站&#xff1a;https://go.dev/ 点击下一步&#xff0c;查看官方手册怎么用 https://tour.go-zh.org/welcome/1 手册中的内容比较简单 go语言是以包的形式化管理函数的 搜索包名…...

    ram的使用——初始化很重要

    背景 ram是非常常用的ip&#xff0c;前人的经验告诉我们&#xff0c;如果不对ram进行初始化直接读写&#xff0c;不定态在实际上板时会出现不可预知的问题。 我们需要对ram进行初始化写0操作&#xff0c;代码如下。需要注意&#xff0c;复位释放时立马写入可能存在复位抖动的…...

    doris:最佳实践

    异步物化视图使用原则​ 时效性考虑&#xff1a; 异步物化视图通常用于对数据时效性要求不高的场景&#xff0c;一般是 T1 的数据。如果时效性要求高&#xff0c;应考虑使用同步物化视图。 加速效果与一致性考虑&#xff1a; 在查询加速场景&#xff0c;创建物化视图时&#x…...

    [创业之路-299]:图解金融体系结构

    一、金融体系结构 1.1 概述 金融体系结构是一个国家以行政的、法律的形式和运用经济规律确定的金融系统结构&#xff0c;以及构成这个系统的各种类型的银行和非银行金融机构的职能作用和相互关系。以下是对金融体系结构的详细分析&#xff1a; 1、金融体系的构成要素 现代金…...

    RL--2

    强化学习当中最难的两个点是&#xff1a; 1.reward delay&#xff1b; 2.agent的行为会影响到之后看到的东西&#xff0c;所以agent要学会探索世界&#xff1b; 关于强化学习的不同类型&#xff0c;可以分为以下三种&#xff1a; 一种是policy based&#xff1a;可以理解为它是…...

    [JVM篇]分代垃圾回收

    分代垃圾回收 分代收集法是目前大部分 JVM 所采用的方法&#xff0c;其核心思想是根据对象存活的不同生命周期将内存划分为不同的域&#xff0c;一般情况下将 GC 堆划分为老生代(Tenured/Old Generation)和新生代(Young Generation)。老生代的特点是每次垃圾回收时只有少量对象…...

    Dify本地安装

    目录 方式一docker安装&#xff1a; 方式二源码安装&#xff1a; Dify本地安装可以用docker方式&#xff0c;和源码编译方式。 先到云厂商平台申请一台Centos系统云主机&#xff0c;网络选择海外&#xff0c;需要公网IP&#xff0c;再按一下流程操作&#xff1a; 方式一doc…...

    python | 两招解决第三方库安装难点

    前言 python 被广泛应用的原因之一&#xff0c;便是拥有大量的第三方库&#xff0c;涵盖 web 开发、数据分析和机器学习等多个方面。 对于多数初学者来说&#xff0c;如何成功安装 python 第三方库成为了一大难点&#xff0c;总是因各种原因导致安装失败。 本文以自身经验&a…...

    stm32mp15x 之 M4 使用 canfd

    目录 序配置添加注坑参考 序 在使用 stm32mp15x 系列时&#xff0c;M4 有不少的坑&#xff0c;这里简单聊聊使用 canfd 时遇到的一些问题。 配置 这里使用 PLL4R 为 100M&#xff0c;用于 CANFD 的时钟 canfd 速率配置成 1M &#xff0c;5M&#xff0c;其中数据传输速率为 5M…...

    第七天:数据提取-正则表达式

    每天上午9点左右更新一到两篇文章到专栏《Python爬虫训练营》中&#xff0c;对于爬虫有兴趣的伙伴可以订阅专栏一起学习&#xff0c;完全免费。 键盘为桨&#xff0c;代码作帆。这趟为期30天左右的Python爬虫特训即将启航&#xff0c;每日解锁新海域&#xff1a;从Requests库的…...

    Python入门全攻略(六)

    文件操作 文件路径 绝对路径:D:\pythonLearing\fileOperating.exe 相对路径:./fileOperating.exe # ./表示当前目录 # ../表示上一级目录 字符编码 字符集编码说明ASCll 最早的字符编码标准之一,基于拉丁字母的字符集,一共有128个字符GBK(国际码)用于简体中文的字符编码,…...

    MongoDB副本集

    副本集架构 对于mongodb来说&#xff0c;数据库高可用是通过副本集架构实现的&#xff0c;一个副本集由一个主节点和若干个从节点所组成。 客户端通过数据库主节点写入数据后&#xff0c;由从节点进行复制同步&#xff0c;这样所有从节点都会拥有这些业务数据的副本&#xff0…...

    在软件开发中正确使用MySQL日期时间类型的深度解析

    在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

    《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

    CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

    理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

    &#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

    Opencv中的addweighted函数

    一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

    蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

    前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

    Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

    Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

    力扣热题100 k个一组反转链表题解

    题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

    CSS | transition 和 transform的用处和区别

    省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

    Go语言多线程问题

    打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

    计算机基础知识解析:从应用到架构的全面拆解

    目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...