[玩转 typescript 系列]搞懂箭头函数的this

Typescript 或者Javascript中this指向问题 阅读详情

应该是最全的箭头函数使用this场景汇总

以下例子如果全部能搞懂,那就算毕业了

大伙可以放到浏览器的控制台里面去试一下,然后一个个去理解就好了,实在难理解先背下来也不是不行

const fn = () => {
	console.log(this)
}
fn()
"use strict"
const fn = () => {
	console.log(this)
}
fn()
const obj = {
	fn: () => {
		console.log(this)
	}
}
obj.fn()
const fn = obj.fn
fn()
const obj = {
	fn1: null,
	fn2: function() {
		this.fn1 = () => {console.log(this)}
	},
}
obj.fn2()
obj.fn1()
const fn = obj.fn1
fn()
const fn = () => {
	console.log(this)
}
const obj = {}
fn.call(obj)
const fn1 = fn.bind(obj)
fn1()
const obj = {
	fn: function() {
		// 执行了某个异步函数,比如发了一个http请求
		someAsyncFunction("hello", () => {
			console.log(this)
		})
	}
}
obj.fn()
const arrowFnCb = () => {
  console.log(this);
};

obj = {
  fn: function () {
    someAsyncFunction("hello", arrowFnCb);
  },
};
obj.fn()
class Obj {
	fn = () => {
		console.log(this)
	}
}
new Obj().fn()
class Obj {
	constructor() {
		this.fn()
	}
	fn = () => {
		console.log(this)
	}
}
new Obj()
class Obj {
	constructor() {
		this.fn1(this.fn)
	}
	fn = () => {
		console.log(this)
	}
	fn1(fn) {
		fn()
	}
}
new Obj()
class Foo {}
class Obj {
	constructor() {
		this.fn1(this.fn)
		return new Foo()
	}
	fn = () => {
		console.log(this)
	}
	fn1(fn) {
		fn()
	}
}
const obj = new Obj()
obj.fn()

小结

一言以蔽之,箭头函数的this指向继承于定义时,父作用域的this。

所以如果不想死记硬背的话,最好能理解一下js里面词法作用域 (lexical scope) 的概念,后面有时间的话我也会出一篇相关文档去解释词法作用域。

以上例子大部分参考于此

Typescript中的This用法详解 TypeScript通过静态类型系统解决JavaScript中this的动态绑定问题。主要方法包括:1) 开启noImplicitThis编译器选项,强制显式声明this类型;2) 在函数首参位置声明this类型;3) 自动推断对象方法和类方法中的this;4) 对于回调函数,推荐使用箭头函数或bind绑定上下文。这些机制将this相关的运行时错误转化为编译时错误,提高代码可靠性。TypeScript不改变this的运行时行为,但通过类型检查确保其使用正确性。 阅读详情

相关推荐

【TypeScript】深入学习TypeScript类(下)

最近博主一直在创作TypeScript的内容,所有的TypeScript文章都在我的TypeScript从入门到精通专栏里,每一篇文章都是精心打磨的优质好文,并且非常的全面和细致,期待你的订阅❤️ 本篇文章将继续去讲解TypeScript中的class类,这也许会是你看过的最全面最细致的TypeScript,关注博主下篇更精彩!..................

前端之行,任重道远! 9427

typescript箭头函数参数_详解Typescript里的This的使用方法

this可以说是Javascript里最难理解的特性之一了,Typescript里的 this 似乎更加复杂了,Typescript里的 this 有三中场景,不同的场景都有不同意思。this 参数: 限制调用函数时的 this 类型this 类型: 用于支持链式调用,尤其支持 class 继承的链式调用ThisType: 用于构造复杂的 factory 函数this 参数由于 javascrip...

weixin_28744613的博客 1798

手把手教你为RK3588开发板适配RTL8211F网卡:设备树配置与PHY驱动匹配全流程

本文详细介绍了在RK3588开发板上适配RTL8211F千兆以太网PHY芯片的全流程,包括硬件原理图确认、设备树配置与PHY驱动匹配。通过实战案例和调试技巧,帮助开发者解决常见问题并优化网络性能,适用于嵌入式Linux开发中的Ethernet网络功能实现。

weixin_29184075的博客 526

TypeScript:箭头函数中的this

和函数中的this是运行时动态绑定的不同,箭头函数实际上没有自己的this,箭头函数中的this是静态的绑定到了外层作用域(全局作用域或函数作用域)的this: let time = "morning"; let greeting = { time : "evening", say : () =>{ console.log("Good " + this.time);//对象不存在作用域,因此箭头函数的外层作用域是全局作用域 } } greeting.say();//输出Good mor

风静如云的博客 1159

C#实战:如何用winmm.dll打造毫秒级高精度定时器(附完整代码)

本文详细介绍了在C#中利用winmm.dll实现毫秒级高精度定时器的完整方案。针对.NET内置定时器精度不足的问题,通过调用timeSetEvent等原生API,提供了超越系统时钟中断周期的精准定时能力。文章包含核心原理剖析、完整的封装类代码以及音视频处理、游戏开发等场景下的实战应用与性能调优指南。

ujm5678901的博客 690

Android音频混音器AudioMixer实战:从多路输入到设备播放的完整流程解析

本文深入解析了Android平台上音频混音器AudioMixer的完整工作流程,涵盖从多路音频输入、轨道创建与配置、AudioBufferProvider数据源接入,到核心混音处理与最终设备播放的全过程。文章重点探讨了如何高效管理音频数据流、配置音量与重采样参数,并提供了缓冲区管理与性能优化的实战技巧,帮助开发者构建稳定、低延迟的音频应用。

l3m4n的博客 342

TypeScript:箭头函数

在TypeScript中,箭头函数是一种简洁的函数定义方式。returnreturnTypeScript可以自动推断箭头函数的参数类型和返回类型,但如果需要明确指定类型,也可以添加类型注解。箭头函数的一个重要特性是它们没有自己的this值,而是捕获其所在(即定义时)的作用域的this值。这在处理事件回调、定时器或者其他需要保持this上下文的场景中非常有用。

HadesNyx 2821

深度学习笔记——Transformer

本文详细介绍面试过程中可能遇到的Transformer知识点。

haopinglianlian的博客 1705

【TypeScript】函数中的 this 声明详解

TypeScript 通过类型系统提供了对this更好的控制。通过显式声明this的类型,开发者可以编写更健壮的代码,避免因this指向不明确而导致的错误。在函数类型中,理解并正确使用voidobjectunknownnever和Function类型对于编写类型安全的 TypeScript 代码至关重要。

lph159的博客 1929

第一章:基础知识 - 概念与基础,理解什么是功耗

电源管理与功耗调优:实战项目经验分享

坚韧与专注 885

【示波器专题】示波器探头的原理深入——有源探头之单端有源探头

由于接地环路的苛刻要求,更高带宽的单端有源探头就算设计了也不实用。因此单端有源探头的带宽一般在6GHz以内,更高带宽的信号测量也只能使用差分有源探头(市面上有些型号的差分探头可同时兼顾单端测试)。......

一点硬件 2146

【TS基础】个人学习记录3-学习函数、箭头申明、参数、this、重载

文章目录定义传参数可选参数默认参数剩余参数函数重载箭头函数 定义 函数声明法: function fn(): string{ return '声明什么类型就要返回什么类型' } 匿名函数法: let fn = function():number{ return 123 } 记得没返回值的要用void类型 let fn = function():void{ ... } 传参数 // 要指定参数类型 function fn(name: string, age: number):string{ r

庞囧的博客 1180

智能生活中枢:基于 ESP32-S3 的桌面智能助手与日程提醒终端设计与实现

本文完成了基于 ESP32-S3 的桌面智能助手与日程提醒终端的完整设计,实现了时间同步、日程管理、声光提醒、环境监测、本地存储等核心功能。硬件接线简洁、软件逻辑清晰,可直接制作成品使用。硬件方案:以 ESP32-S3 为核心,搭配 OLED、DS3231、DHT11、按键、声光模块,接线标准化、易复刻;软件方案:基于 Arduino 开发,提供标准 Mermaid 软件流程图,代码模块化、可直接编译运行;核心功能:网络授时、本地日程管理、掉电存储、声光提醒、温湿度监测,满足桌面智能助手全场景需求。

weixin_42300449的博客 209

箭头函数和 this 绑定

摘要 TypeScript中的箭头函数提供了简洁的语法和独特的this绑定机制。与传统函数不同,箭头函数从外层上下文继承this值,避免了回调场景中的常见问题。本文探讨了箭头函数的基本语法、类型支持(包括参数和返回类型注解)以及this绑定的特性。通过实例展示了箭头函数如何解决事件监听、定时器等场景中的this上下文问题,并介绍了TypeScript的类型检查工具(如this参数注解和noImplicitThis选项)。最后,重点分析了箭头函数在Promise、数组方法等回调场景中的实际应用优势,帮助开发者

zimin的专栏 1482

基于深度学习的AI生成式人脸图像鉴别

AIGC(AI内容生成)技术的快速发展确实为创作者提供了高效生产力工具,但同时也引发了一些问题和挑战。这些技术可以生成以假乱真的图像、视频换脸等,给不法分子提供了滥用的机会。其中,一些不法分子可能利用AIGC技术制造虚假新闻、违反版权、绕过活体身份验证、散布谣言和诽谤他人、进行敲诈勒索等非法活动,以谋取不当利益。这些行为给社会造成了严重的负面影响,破坏了信息的真实性和可信度。因此,我们需要认识到AIGC技术的潜在风险,并采取相应的措施来应对。

mingo_敏 4497

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

TypeScript笔记:箭头函数“=>"

TypeScript中有一种用法,成为箭头函数(Arrow Function),写作 ”=>"。 作用:通过 => 箭头定义匿名函数 注意:箭头函数不能用作构造函数(所以必然没有Prototype属性)或者Generator函数 1. 最小化例子: let func1 = para => para; console.log(func1(100)); //输出 100 ...

Arthur Guo 的专栏 4746

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

TypeScript 中箭头函数与普通函数的区别

TypeScript中箭头函数与普通函数的区别主要体现在语法、this上下文、arguments对象、构造函数和原型链等方面。箭头函数语法简洁,不绑定自己的this,适合回调函数和事件处理;普通函数拥有完整的this上下文,可用作构造函数和原型链继承。本文通过实际案例对比了两者的使用场景,帮助开发者根据需求选择合适的函数类型。

你若盛开,清风自来 457

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

TypeScript中,this关键字的用法

的值通常指向触发事件的 DOM 元素。方法作为回调函数附加到 'myButton' 元素的 'click' 事件上。的方式在需要确保函数内部使用特定对象作为上下文时非常有用。如果函数是作为对象的方法调用的,则。不会创建自己的上下文,而是捕获了箭头函数所在的上下文的。的类型注解,表示在函数内部可以使用任意类型的。的方法,该方法使用箭头函数定义。是一个关键字,表示当前执行上下文中的对象。,以确保在事件处理函数中访问到类的实例。中使用了箭头函数,因此方法内部的。的值一致且不会改变的常见模式。

weixin_45819141的博客 1695

TypeScript类中的this作用域详解

TypeScript中有三种声明函数的方法: // 普通函数 function fn1() { console.log("XJL"); } // 表达式声明 var fn2 = function () { console.log("XJL"); } // 箭头函数声明 var fn3 = () => { console.log("XJL"); } 现在我们来演示一下,在TypeScript的类的各种情况下this作用域的范围 1.无嵌套类和无嵌套函数的普通类 clas.

漫步者的编程世界 3267

【TypeScript】箭头函数

在 JavaScript 和 TypeScript 里,我们会经常遇到不需要给函数命名的情况,尤其是在需要将一个函数作为参数传给另外一个函数的时候。 这时,我们会创建 匿名函数 。 因为这些函数不会在其他地方复用,所以我们不需要给它们命名。 这种情况下,我们通常会使用以下语法: const myFunc = function() { const myVar = "value"; return myVar; } ES6 提供了其他写匿名函数的方式的语法糖。 你可以使用 **箭头函数 **:

VirusScanLog的博客 2608

typescript箭头函数参数_TypeScript 箭头函数

关于箭头的函数的基本用法,这里不多介绍,具体参阅箭头函数介绍一章节。下面再简要介绍一下箭头函数中this指向问题。普通函数this的指向参阅JavaScript this一章节。代码实例如下:[JavaScript] 纯文本查看 复制代码let obj = {info: ["蚂蚁部落", "青岛市南区", 4],show: function() {console.log(this.info[1])...

weixin_36080939的博客 587

Angular中typescript的this问题

Angular中typescript的this问题 1. 例子 在使用Angular的时候封装一个http请求模块,具体代码如下: import { Injectable } from '@angular/core'; import { HttpClient, HttpParams, HttpHeaders, HttpErrorResponse } from '@angular/common/ht...

wallowyou的博客 1760

typescript箭头函数参数_TypeScript 箭头函数_TS教程

关于箭头的函数的基本用法,这里不多介绍,具体参阅箭头函数介绍一章节。下面再简要介绍一下箭头函数中this指向问题。普通函数this的指向参阅JavaScript this一章节。代码实例如下:let obj = {info: ["Downzz.com", "青岛市南区", 4],show: function() {console.log(this.info[1]);}}obj.show();普通函...

weixin_39529903的博客 1097

玩转TypeScript之你真的了解this所指对象吗

玩转TypeScript之你真的了解this所指对象吗

Xmumu_的博客 1205

TypeScript 中的 this指向问题

TypeScript 中的 this指向问题 如果你接触过TypeScript有一段时间,那么你会发现很多并非语言设计当中的“特征”。这些所谓的特征并非真正TypeScript的语法糖部分,也并非语言设计当中绝妙的点子。仔细研究TypeScript代码与编译后的 JavaScript 代码,你会发现,很多东西其实都是委曲求全的产物。 这篇文章里,我们仅来讨论关于TypeScrip...

bangqubb78431的博客 2586

TypeScript箭头函数用法详解

ES6版本的TypeScript提供了一个箭头函数,它是定义匿名函数的简写语法,用于函数表达式,它省略了function关键字。我们可以称它为胖箭头(因为->是一个细箭头,而=>是一个“胖”箭头),它也被称为Lambda函数,箭头函数具有“this”关键字的词法作用域。 箭头函数的目的是: 当我们不需要继续输入功能。 它从词汇上捕捉这个关键字的含义。 它从词汇上抓住了参数的意义。 语法 我们可以把一个箭头函数的语法分为三部分: 参数: 函数可以有参数,也可以没有参数。 箭头符号/l

weixin_42776027的博客 1万+
上一篇: [面试系列]字节跳动前端面试
下一篇: [玩转 typescript 系列]巧用ts infer关键字
procstu
博客等级 码龄9年 13粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值