ES6知识点

目录

1、let、cons、var的区别

2、const对象的属性可以修改吗

3、如果new一个箭头函数会怎么样

4、箭头函数和普通函数的区别:

 5、扩展运算符的作用及使用场景


1、let、cons、var的区别

1️⃣:块级作用域:块作用域由{}包括,let和const具有块级作用域,var不存在块级作用域。块级作用域解决了ES5中的两个问题:
        - 跨级作用域:块作用域由{}包括,let和const具有块级作用域,var不存在块级作用域。块级作用域解决了ES5两个问题:

      💫:内层变量可能覆盖外层变量

      💫:用来计数的循环变量泄露为全局变量

for (var i = 0; i < 5; i++) {
  setTimeout(function() {
    console.log(i);
  }, 1000);
}

❗:此时输出的是5,这是因为循环变量 i 被泄漏到了全局作用域中。

解决方案:使用let或者循环函数来解决。

for (let i = 0; i < 5; i++) {
  setTimeout(function() {
    console.log(i);
  }, 1000);
}

循环函数:
for (var i = 0; i < 5; i++) {
  (function(i) {
    setTimeout(function() {
      console.log(i);
    }, 1000);
  })(i);
}

2️⃣:变量提升:var存在变量提升,let和const不存在变量提升,即变量只能在声明之后使用,否则会报错

3️⃣:给全局添加属性:浏览器的全局对象是window,Node的全局对象是gloabl。var声明的变量为全局变量,并且会将改变量添加为全局对象的属性,但是let和const不会

4️⃣:重复声明:var可以重复声明变量,const和let不允许重复声明变量

5️⃣:暂时性死区:let和const命令声明变量之前 ,该变量都是不可用的,称为暂时性死区。var不存在暂时性死区。

 6️⃣:初始值设置:在变量声明时,var和let可以不用设置初始值。而const必须设置初始值

7️⃣:指针指向:let和const都是ES6新增的用于创建变量的语法。let创建的变量是可以更改指针指向。但const声明的变量是不允许改变指针的指向。

2、const对象的属性可以修改吗

 对象的属性可以修改,但是变量不能修改

原因:

1. 声明的变量在内存中被分配了一个固定的地址,这个地址中存储了变量的值,而const在声明变量赋值之后就会被锁定,不能再修改。

2. 使用 let 声明的变量是允许重新赋值的

3. 对于引用类型的数据来说,变量指向数据的内存地址,保存的只是一个指针,const只能保证这个指针式固定不变的,而指向的数据结构是不能完全控制的。

3、如果new一个箭头函数会怎么样

箭头函数没有prototype,也没有this指向,也不可以使用arguments参数,所以不能new一个箭头函数

arguments参数:是一个类数组对象,不是数组,除了有数组的length属性,没有数组的任何属性。可以通过Array.from()或者扩展运算符将其转化为真正的数组。

4、箭头函数和普通函数的区别:

1️⃣:箭头函数比普通函数更加简洁

  •     如果没有参数,可直接写空括号即可
  •     如果只有一个参数,可以省去一个空括号即可
  •     如果函数体的返回值只有一句,可以省略大括号
  •     如果函数体不需要返回值,且只有一句话,则可以在语句前面加一个void关键字。最常见的就是调用一个函数

2️⃣:箭头函数没有自己的this

        箭头函数的this指向是在自己的作用域的上一层继承this

3️⃣:call、apply、bind不能改变箭头函数中this的指向

4️⃣:箭头函数不能作为构造函数使用

5️⃣:箭头函数不能用作Generator函数,不能使用yeild关键字

因为Generator函数是由生成器函数返回的,而生成器函数是与生成器函数的实例相绑定的,所以不能使用yeild关键字

 5、扩展运算符的作用及使用场景

🔰:对象扩展运算符

对象扩展运算符用于取出参数对象中的所有可遍历属性

使用场景:

1️⃣:自定义属性,常用作动态菜单渲染中,需要添加自定义的属性

let person = {name:'Mike',age:51}
let P1 = {...person,gender:'Male'}
console.log(P1);

2️⃣:redux中的reducer函数中的state对象要求不能直接修改,可以通过扩展运算符把修改的对象复制一遍,然后产生一个新的对象返回。

 🔰:数组扩展运算符:

数组扩展运算符可以将一个数组转化为用逗号分隔的数组。

使用场景:

1️⃣:将数组转化为参数序列

function add(x,y) {
    return x+y
  }
const numbers = [1,2]
add(...numbers)

2️⃣:合并数组

const arr1 = [1,2,3,4,5]
const arr2 = [4,...arr1,5,678]
console.log(arr2);

3️⃣:扩展运算符与解构赋值结合起来,用于生成数组

const arr1 = [1,2,3,4,5]
const [first,...rest] = [1,2,3,4,5]
console.log(rest); 输出2,3,4,5
console.log(first); 输出1

4️⃣:将字符串转化为真正的数组

const strToArr = [...'hello']
console.log(strToArr);

5️⃣:将arguments对象转化为真实数组

function func1(a, b, c) {
    console.log([...arguments]);  输出[ 1, 2, 3 ]
  }
  func1(1, 2, 3);

将arguments转化为真正的数组还可以使用Array.prototype.slice.call(arguments)方法

Array.prototype.slice接收参数返回一个新的数组,然后通过 call() 方法将 arguments 作为 Array.prototype.slice() 的执行上下文来使用它的 slice() 方法

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ERM LABS 与 The Sandbox 战略合作,将真人密室逃脱游戏引进元宇宙

将现实生活中的体验带入一个全新的维度&#xff01;ERM LABS 专注于将现实生活中的娱乐及冒险体验以游戏独特架构设计扩展到元宇宙裡。与 The Sandbox 合作&#xff0c;该项目旨在为全球合作的真人密室逃脱场所提供无限开放形的线上虚拟世界&#xff0c;让玩家尽情享受考验智商…

09——svg中path的使用

一、path 是 svg 中最强大的图形 用于定义一个 路径所有命令均允许小写字母。大写 表示绝对定位&#xff0c;小写 表示 相对定位 &#xff08;相对于上一个结束的坐标&#xff09;d 属性中包含所有路径的点&#xff0c;可根据命令缩写 自由组合 命令 名称 …

最全的分布式事务详情,它来啰~

我们首先得理解什么是分布式事务呢&#xff1f;分布式事务是指在分布式系统中&#xff0c;涉及多个计算机或服务器的操作序列&#xff0c;这些操作需要满足一致性和可靠性的要求。每个操作要么全部成功执行&#xff0c;要么全部回滚&#xff0c;以保持数据的一致性和完整性。 …

假期出行小程序+chatgpt旅游攻略

马上五一了,如果想出去旅游,需要提取规划好路线图,我们可以借助chatgpt的路线规划功能帮我们生成一份攻略,按照攻略我们就可以愉快的出去玩耍了。 本文结合chatgpt,利用低代码工具帮我们制作一份旅行导览小程序,可以按照行程方便的出行。 1 制定攻略 我们在聊天窗口输…

从小白到黑客高手:一份全面详细的学习路线指南

前言 黑客从入门到精通需要经过深入的学习和实践&#xff0c;这是一个需要长时间投入和大量精力的过程。在这份学习路线中&#xff0c;我将为你介绍黑客学习的基本知识和技能&#xff0c;帮助你逐步掌握黑客技能。 黑客 一、入门阶段 1.了解计算机基础知识 学习计算机基础知…

thinkPhP6.0安装教程图解--PHP框架安装

ThinkPhP 6.0 安装 1.环境检查 首先&#xff0c;thinkphp6.0&#xff0c;要求php的环境是7.2.5及以上的&#xff0c;所以先检查自己的php环境是否符合要求。 在cmd命令窗口中输入php -v 或者没有配置环境变量的话&#xff0c;可以在php编辑器中输出php_info()或则PHP_VERSIO…

【鲁棒优化、无功优化】两阶段鲁棒优化的主动配电网动态无功优化【IEEE33节点】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

A股市场上股票行情数据接口有那几种?

L2行情数据接口相比Level-1接口相比&#xff0c;L2行情市场具有数据更完整、推送速度更及时的优势&#xff0c;帮助投资者及时把握盘中主要资金流&#xff0c;做出更准确的投资决策。简而言之&#xff0c;Level-2最大的作用就是提前看到主力的大单&#xff0c;对于追逐日线跌停…

Linux高并发服务器开发01:Linux系统编程入门

GCC 什么是GCC GCC工作流程 GCC常用的参数选项 GCC和G的区别 静态库 什么是库 静态库的制作 先编译生成对应的.o文件 gcc -c add.c sub.c mult.c div.c -I …/include/ 再将.o文件打包成静态库 ar rcs libcalc.a add.o sub.o mult.o div.o 使用的时候-l指定库名称 gcc main.c…

【论文简述】Multi-View Stereo Representation Revisit: Region-Aware MVSNet(CVPR 2023)

一、论文简述 1. 第一作者&#xff1a;Yisu Zhang 2. 发表年份&#xff1a;2023 3. 发表期刊&#xff1a;CVPR 4. 关键词&#xff1a;MVS、3D重建、符号距离场 5. 探索动机&#xff1a;像素深度估计仍存在两个棘手的缺陷。一是无纹理区域的估计置信度较低。二是物体边界附…

RTSP/RTP on TCP 协议抓包记录

仅做记录&#xff0c;无他。 RTSP OPTIONS 客户端发送&#xff1a; 服务端响应 RTSP DESCRIBE 客户端发送 服务端响应 RTSP SETTUP 客户端发送请求 服务端响应 RTSP PLAY 客户端发送请求 服务端响应 RTP包 这个比较复杂&#xff0c;得好好解析&#xff0…

消息队列中间件 - RabbitMQ消息的持久化、确认机制、死信队列

持久化和应答机制Ack 消息队列中间件系列的最后一篇了&#xff0c;RabbitMQ消息的持久化、确认机制、死信队列、负载均衡等一系列进行说明。 消息持久化 当RabbitMq重启以后&#xff0c;未消费的消息&#xff0c;可以在服务重启后继续消费&#xff0c;不会丢失。 应答机制A…

DS215KLDCG1AZZ03A如何编写温度比例的代码?

DS215KLDCG1AZZ03A如何编写温度比例的代码&#xff1f; 可编程逻辑控制&#xff0c;简称PLC&#xff0c;由美国机械工程师迪克莫利于1年1968月<>日首次设计。PLC最初是为了减少汽车行业员工的工作量而开发的&#xff0c;从那时起&#xff0c;它们已被用于所有其他恶劣环境…

MySQL --- 多表查询

多表查询、事物、以及提升查询效率最有手段的索引 一. 多表查询 1.1 多表查询 --- 概述 1.1.1 数据准备 将资料中准备好的多表查询数据准备的SQL脚本导入数据库中。 部门表&#xff1a; 员工表&#xff1a; 1.1.2 介绍 多表查询&#xff1a;指从多张表中查询数据&#…

尚硅谷大数据技术Spark教程-笔记01【Spark(概述、快速上手、运行环境、运行架构)】

视频地址&#xff1a;尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据技术Spark教程-笔记01【Spark(概述、快速上手、运行环境、运行架构)】尚硅谷大数据技术Spark教程-笔记02【SparkCore(核心编程、案例实操)】尚硅谷大数据技术Spark教程-笔记03【SparkSQL…

云原生背景下如何配置 JVM 内存

image.png 背景 前段时间业务研发反馈说是他的应用内存使用率很高&#xff0c;导致频繁的重启&#xff0c;让我排查下是怎么回事&#xff1b; 在这之前我也没怎么在意过这个问题&#xff0c;正好这次排查分析的过程做一个记录。 首先我查看了监控面板里的 Pod 监控&#xff1a;…

奶爸式Swagger教学

目录 一、导入依赖 二、SwaggerConfig基础编程 三、Swagger 常用说明注解 1.API 2.ApiOperation 3.ApiModel 4.ApiModelProperty 5.ApiParam 6.ApilmplicitParam 一、导入依赖 <!--开启Swagger --><!-- https://mvnrepository.com/artifact/io.springf…

Vector - 常用CAN工具 - CANoe软件安装常见问题

目录 一、确认电脑系统盘是否满足要求&#xff0c;CANoe软件对PC要求如下&#xff1a; 二、确认软件安装包完整 三、确认软件与电脑系统之间的兼容性 四、关闭后台程序 五、安装软件 六、清空临时文件夹 七、尝试在其他电脑上安装 一、确认电脑系统盘是否满足要求&#…

STM32 调试TM7711驱动原理图驱动代码

本文使用工程代码如下 (1条消息) STM32调试TM7711驱动原理图驱动源代码&#xff0c;参考如下博客&#xff0c;有原理图设计资源-CSDN文库 背景 项目选用TM7711&#xff0c;还是很令人吃惊的&#xff0c;主要是有如下几个理由 第一就是便宜 第二精度高 STM32的ADC精度不够…

微生物常见统计检验方法比较及选择

谷禾健康 微生物组经由二代测序分析得到庞大数据结果&#xff0c;其中包括OTU/ASV表&#xff0c;物种丰度表&#xff0c;alpha多样性、beta多样性指数&#xff0c;代谢功能预测丰度表等&#xff0c;这些数据构成了微生物组的变量&#xff0c;大量数据构成了高纬度数据信息。 针…