箭头函数的一些总结

箭头函数,我们常常会用到,那它在使用上和常规函数有什么区别呢?我们来一起看看哈

先来定义一个普通函数,一个箭头函数,分别看一下它们的结构

function abc(){}
console.dir(abc)

在这里插入图片描述
通过查看结构我们知道普通函数有两个原型,一个是作为函数特有的prototype,原型另一个是作为对象使用的__proto__原型(在之前讲原型的文章中都提过)

let arrowFn = ()=>{}
console.dir(arrowFn)

在这里插入图片描述
我们打印箭头函数的结构看到,箭头函数没有prototype原型,所以我们知道了:

箭头函数没有自己的this
箭头函数因为没有prototype原型,所以也没有constructor构造函数,所以无法实例化对象

那在箭头函数中使用this,又有什么情况呢?

我们来定义一个对象

let obj = {name: 'lili',age: 18,getName(){return ()=>{ console.log(this.name) }},getAge: ()=>{ console.log(this.age) }
}var name = 'mike'
var age = 28
let getName = obj.getName()
getName() //lili
obj.getAge() //28

我们在上面定义了一个对象obj,然后在里面我们给它添加了两个属性getName和getAge,可以看到两种形式,一种是箭头函数外面套了一个普通函数,另外一个箭头函数直接添加到obj上面

由代码运行的结果,我看可以看到

箭头函数中的this指向父级作用域中的this,并且,如果箭头函数外层没有普通函数,那么它的this将指向window(全局对象)

我们在上面打印箭头函数的结构是看到,箭头函数也拥有call、apply、bind的属性,那能不能利用它们改变this的指向呢,来试试

let obj = {name: 'lili',age: 18,getName(){return (()=>{ console.log(this.name) }).bind(window)},getAge: ()=>{ console.log(this.age) }
}
let getName = obj.getName()
getName() //lili

可以看到,虽然箭头函数也有call、apply、bind的属性,但是箭头函数无法通过call、apply、bind改变this的指向,它的this永远指向父及作用域中的this

还是回头去看打印的箭头函数的结构,我们发现箭头函数也有arguments,现在我们来改造一下obj,打印arguments

let obj = {name: 'lili',age: 18,getName(param1, param2){return ()=>{ console.log(arguments)}},getAge: (param1, param2)=>{ console.log(arguments) }
}

我们先来看看this指向父及作用域的箭头函数中arguments

obj.getName()()

在这里插入图片描述
我们看到this指向父及作用域的箭头函数中arguments,也是继承了父级函数中的arguments

我们再来看this指向全局对象的情况

obj.getAge()。 // Uncaught ReferenceError: arguments is not defined

报错了,所以我们有了结论:

箭头函数的this指向全局,使用arguments会报未声明的错误。
箭头函数的this指向普通函数时,它的argumens继承于该普通函数

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

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

相关文章

用Python Turtle画一个中国结

中国结,作为中华民族传统文化的象征之一,以其独特的编织技艺和深厚的文化内涵,深受人们喜爱。今天,我们就来用Python的turtle模块,尝试绘制一个充满韵味的中国结。 我们先来看看整个中国结生成的过程: 中国…

算法学习Day1——【数据结构】单调栈

1.什么是单调栈以及单调栈的作用 (1)定义 顾名思义,单调栈是一个有序的栈,可能从栈顶到栈底单调递增(单调递增栈),也有可能从栈顶到栈底单调递减(单调递减栈)。 &…

KUKA机器人如何给IO信号或寄存器添加中文注释信息?

KUKA机器人如何给IO信号或寄存器添加中文注释信息? 如下图所示,首先,我们需要登录专家以上用户权限(默认密码KUKA), 如下图所示,点击“投入运行”—“网络配置”, 如下图所示,此时机器人的IP地址为192.168.1.10, 如下图所示,用一根网线连接机器人控制柜到笔记…

[SpringBoot] JWT令牌——登录校验

JWT(JSON Web Token)是一种用于在网络应用之间传递信息的开放标准(RFC 7519)。它由三部分组成:头部(header)、载荷(payload)和签名(signature)。J…

使用大模型框架 LlamaIndex ,释放多文档代理的强大功能

在自然语言处理和信息检索领域,多文档代理(MDAs)的出现带来了重大的进步。这些代理引入了一系列增强功能,包括在文档检索过程中重新排名和复杂查询规划工具,这代表了信息检索系统的范式转变。 传统上,搜索…

Flask表单详解

Flask表单详解 概述跨站请求伪造保护表单类把表单渲染成HTML在视图函数中处理表单重定向和用户会话Flash消息 概述 尽管 Flask 的请求对象提供的信息足够用于处理 Web 表单,但有些任务很单调,而且要重复操作。比如,生成表单的 HTML 代码和验…

【USB 3.2 Type-C】 端口实施挑战的集成解决方案 (补充一)

USB 3.2 Type-C 端口集成 补充,上一篇感觉还有没理解到位的一部分; 一、只做正反插的通信,已经差不多够了,但是这并不是完整的TYPE-C,必须要补充上PD; 参考连接: TYPE-C PD浅谈(一)https://w…

大模型实战:如何使用图数据库提高向量搜索精确度?

文本嵌入和向量搜索技术可以帮助我们根据文档的含义及其相似性来检索文档。但当需要根据日期或类别等特定标准来筛选信息时,这些技术就显得力不从心。 为了解决这个问题,我们可以引入元数据过滤或过滤向量搜索,这允许我们根据用户的特定需求…

kotlin 编写一个简单的天气预报app (七)使用material design

一、优化思路 对之前的天气预报的app进行了优化,原先的天气预报程序逻辑是这样的。 使用text和button组合了一个输入城市,并请求openweathermap对应数据,并显示的功能。 但是搜索城市的时候,可能会有错误,比如大小写…

Linux IP Forwarding路由转发实验

linux 路由转发功能 Linux 操作系统具备路由转发功能,路由功能是指 Linux 操作系统提供的路由管理和转发功能,它允许 Linux 主机在网络中正确地转发数据包,并确保数据包能够达到其目的地。 出于安全考虑,Linux系统默认是禁止数据…

力扣---二叉树的右视图

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4]示例 2: 输入: [1,null,3] 输出: [1,3]示例 3: 输入: [] 输出: []实现方法&…

线阵相机和面阵相机简介

线阵相机 线阵相机,顾名思义就是所探测的物体要在一个很长的界面上。线阵相机的传感器只有一行感光像素,所以线阵相机一般具有非常高的扫描频率和分辨率。 线阵相机特点 线阵相机使用的线扫描传感器通常只有一行感光单元(少数彩色线阵使用…