ES6知识点

news2024/11/24 5:51:02

目录

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() 方法

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

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

相关文章

Flink 常用API(1)—— 源算子

目录 执行环境&#xff08;Execution Environment&#xff09; 创建执行环境 执行模式配置 触发程序执行 源算子&#xff08;Source&#xff09; 从集合中读取数据 从文件中读取数据 从Socket读取数据 从Kafka读取数据*** 自定义 Source&#xff08;数据源&#xff0…

【结构与算法】—— 游戏概率常用算法整理 | 游戏中的常见概率设计分析

&#x1f4e2;博客主页&#xff1a;肩匣与橘&#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;本文由肩匣与橘编写&#xff0c;首发于CSDN&#x1f649;&#x1f4e2;生活依旧是美好而又温柔的&#xff0c;你也是✨ …

Smartbi X 广州轻工集团,打造集团价值创造型总部

广州轻工工贸集团有限公司&#xff08;简称“广州轻工集团”&#xff09;是广州市第一家工贸合一的大型企业集团公司&#xff0c;最早起源于1950年9月成立的广州市合作事业管理局&#xff0c;逐渐演化形成广州市轻工业局。1995年10月&#xff0c;广州市轻工业局成建制改建为经济…

【C++】搜索二叉树

文章目录 &#x1f4d5; 概念&#x1f4d5; 搜索二叉树的实现框架插入节点查找节点★ 删除节点 ★ &#x1f4d5; 源代码 &#x1f4d5; 概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树&#xff1a; 若它的左子树不为空&…

5。STM32裸机开发(2)

嵌入式软件开发学习过程记录&#xff0c;本部分结合本人的学习经验撰写&#xff0c;系统描述各类基础例程的程序撰写逻辑。构建裸机开发的思维&#xff0c;为RTOS做铺垫&#xff08;本部分基于库函数版实现&#xff09;&#xff0c;如有不足之处&#xff0c;敬请批评指正。 &a…

全景描绘云原生技术图谱,首个《云原生应用引擎技术发展白皮书》发布

5月12日&#xff0c;由神州数码主办、北京经开区国家信创园、中关村云计算产业联盟协办的2023通明湖论坛-云原生分论坛在京召开。论坛期间&#xff0c;神州数码联合北京通明湖信息技术应用创新中心、中国信通院和通明智云正式发布了《云原生应用引擎技术发展白皮书》&#xff0…

干货 | 心理学人电脑选购指南来了!

Hello&#xff0c;大家好&#xff01; 这里是壹脑云科研圈&#xff0c;我是喵君姐姐&#xff5e; 当我们在选择电脑时经常会无从下手&#xff0c;不知道该如何才能选择一款既能满足我们的科研需要又具有良好性价比的电脑。 本期我们邀请到了唐仙和梦马来为我们详细解答心理学…

我的Makefile模板

OBJxxxxCFLAGS -g -Wall${OBJ}:${OBJ}.o main.o%*.o:%*.c.PHONY:clean clean:${RM} *.o ${OBJ} core xxxx → xxxx.c xxxx.h main.c 比如&#xff1a; 包含了&#xff1a;

PhotoScan拼接无人机航拍RGB照片

目录 背景 拼接步骤 1.新建并保存项目 2.添加照片 3.对齐照片 4.添加标记&#xff08;Markers&#xff09; 5.添加地面控制点 6.建立批处理任务 7.使用批处理文件进行批处理 8.导出DEM 9.导出DOM 背景 本文介绍使用地面控制点&#xff08;GCPs&#xff09;拼接​​…

Java面试知识点(全)- Java面试基础部分一

Java基础 语法基础 面向对象 封装 利用抽象数据类型将数据和基于数据的操作封装在一起&#xff0c;使其构成一个不可分割的独立实体。数据被保护在抽象数据类型的内部&#xff0c;尽可能地隐藏内部的细节&#xff0c;只保留一些对外接口使之与外部发生联系。用户无需知道对…

如何解决ChatGPT网络错误的问题,让AI对话更丝滑~

前言 在当今人工智能技术的飞速发展中&#xff0c;ChatGPT 作为一款大型语言模型备受瞩目。近期&#xff0c;其在各大社交媒体平台上的表现更是引来了一片关注之声。无论是与用户进行有趣的对话&#xff0c;还是帮助人们解决实际问题&#xff0c;ChatGPT 展现出了其强大的自然…

谷歌慌了!想发论文得审批,优先开发产品,让OpenAI没得看

来源 | 机器之心 ID | almosthuman2014 众所周知&#xff0c;谷歌就像人工智能领域的「黄埔军校」&#xff0c;自深度学习兴起后培养出了整整一代机器学习研究人员和工程师。很长一段时间里&#xff0c;谷歌就是领先 AI 技术的代名词。 人们已经习惯跟随谷歌的脚步&#xff0c…

操作符(算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符)

目录 算术操作符 移位操作符 移位规则 位操作符 交换两个整形变量的写法 赋值操作符 单目操作符 sizeof和数组的纠缠 和--运算符 多组输入的方案 关系操作符 逻辑操作符 算术操作符 -- 加法操作符&#xff08;&#xff09;&#xff1a;用于将两个值相加。 -- 减法操…

算法修炼之练气篇——练气八层

博主&#xff1a;命运之光 专栏&#xff1a;算法修炼之练气篇 前言&#xff1a;每天练习五道题&#xff0c;炼气篇大概会练习200道题左右&#xff0c;题目有C语言网上的题&#xff0c;也有洛谷上面的题&#xff0c;题目简单适合新手入门。&#xff08;代码都是命运之光自己写的…

cv2BGR转化为RGB

import cv2 import matplotlib.pyplot as plt img cv2.imread(1.png,1)#1加载彩图 0加载灰度图 img2 cv2.cvtColor(img,cv2.COLOR_BGR2RGB)#cv2读取是BGR 如果使用plt包要转换为RGB plt.subplot(1,2,1) plt.imshow(img2) plt.subplot(1,2,2) plt.imshow(img) plt.savefig(&qu…

【Java零基础入门篇】第 ⑥ 期 - 异常处理

博主&#xff1a;命运之光 专栏&#xff1a;Java零基础入门 学习目标 掌握异常的概念&#xff0c;Java中的常见异常类&#xff1b; 掌握Java中如何捕获和处理异常&#xff1b; 掌握自定义异常类及其使用&#xff1b; 目录 异常概述 异常体系 常见的异常 Java的异常处理机制…

【数学】通俗理解泰勒公式(牛顿迭代法有用到)

【数学】通俗理解泰勒公式&#xff08;牛顿迭代法有用到&#xff09; 文章目录 【数学】通俗理解泰勒公式&#xff08;牛顿迭代法有用到&#xff09;1. 介绍2. 通俗理解2.1 近似计算 3. 泰勒公式的推导4. 泰勒公式的定义5. 扩展 — 麦克劳林公式参考 1. 介绍 最近在看一些机器…

java异常的分类(常见的异常类型)

异常的分类 1. 编译时异常 在程序编译期间发生的异常&#xff0c;称为编译时异常&#xff0c;也称为受检查异常(Checked Exception) public class Person {int age;private String name;private String gender;// 想要让该类支持深拷贝&#xff0c;覆写Object类的clone方法即…

C语言—字符函数和字符串函数

字符函数和字符串函数 strlenstrcpystrcatstrcmpstrncpystrncatstrncmpstrstrstrtokstrerrorperror字符分类函数字符转换函数memcpymemmovememmcmpmemset C语言中对字符和字符串的处理很是频繁&#xff0c;但是C语言本身是没有字符串类型的&#xff0c;字符串通常放在 常量字符…

ChatGPT最强对手Claude如何无门槛使用?

Claude&#xff0c;一个冉冉升起的新星&#xff0c;由 chatgpt 团队出来的员工开发的&#xff0c;由于他们对模型的一些发展理念不同&#xff0c;单独融资创建了 Claude&#xff0c;总体来说表现可圈可点&#xff0c;但整体看可能还不如 chatgpt4.0。 ChatGPT 眼中的 Claude C…