ES6:ES6 的新增语法

news2024/9/23 11:20:54

什么是 ES6 ?

ES 的全称是 ECMAScript , 它是由 ECMA 国际标准化组织,制定的一项脚本语言的标准化规范

年份

版本

20156

ES2015

20166

ES2016

20176

ES2017

20186

ES2018

ES6 实际上是一个泛指,泛指  ES2015 及后续的版本。

为什么使用 ES6 ?

每一次标准的诞生都意味着语言的完善,功能的加强。JavaScript语言本身也有一些令人不满意的地方。 

变量提升特性增加了程序运行时的不可预测性

语法过于松散,实现相同的功能,不同的人可能会写出不同的代码

let

ES6中新增的用于声明变量的关键字。

let声明的变量只在所处于的块级有效

块级作用域就是一对大括号{}

if (true) { 
     let a = 10;
 } console.log(a) // a is not defined

使用块级作用域,就是防止在设计的业务逻辑太多时,块级变量影响全局变量 

注意:使用let关键字声明的变量才具有块级作用域,使用var声明的变量不具备块级作用域特性。

 

使用let命名变量,只能在大括号里面使用,外面后报错 

防止循环变量变成全局变量

for循环有点特殊,虽然他没有写在{}里面但是在(里面的let变量依旧跟for(){}绑定在一起) 在for循环里面可以访问

不存在变量提升

console.log(a); // a is not defined 
 let a = 20;

暂时性死区

var tmp = 123;
 if (true) { 
     tmp = 'abc';
     let tmp; 
 } 

 因为查找是从本级作用域先开始查找,发现下面的代码中有该声明变量,就不会往上一级查找了

 经典面试题

var arr = [];
 for (var i = 0; i < 2; i++) {
     arr[i] = function () {
         console.log(i); 
     }
 }
 arr[0]();
 arr[1]();

可以用异步分析,function会先挂起,直到循环结束才会调用,此时的i=2了 

经典面试题图解:此题的关键点在于变量i是全局的,函数执行时输出的都是全局作用域下的i值。

let arr = [];
 for (let i = 0; i < 2; i++) {
     arr[i] = function () {
         console.log(i); 
     }
 }
 arr[0]();
 arr[1]();

 

经典面试题图解:此题的关键点在于每次循环都会产生一个块级作用域,每个块级作用域中的变量都是不同的,函数执行时输出的是自己上一级(循环产生的块级作用域)作用域下的i.

let声明不会到全局 循环后i=1 然后调用arr[0] 把0赋值给了i 所以i是0 var是直接在全局找了没进循环里面

const

作用:声明常量,常量就是值(内存地址)不能变化的量。

具有块级作用域

if (true) { 
     const a = 10;
 } console.log(a) // a is not defined

声明常量时必须赋值 

const PI; // Missing initializer in const declaration

常量赋值后,值不能修改。 

const PI = 3.14;
 PI = 100; // Assignment to constant variable. 
const ary = [100, 200];
 ary[0] = 'a'; ary[1] = 'b';
 console.log(ary); // ['a', 'b']; 
 ary = ['a', 'b']; // Assignment to constant variable.

 使用const关键字需要赋值,同时对于简单的数据类型,不能修改它的值,而对应复杂的数据类型,例如对象,则可以修改其内部的值 

letconstvar 的区别

1. 使用 var 声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象

2. 使用 let 声明的变量,其作用域为该语句所在的代码块内,不存在变量提升

3. 使用 const 声明的是常量,在后面出现的代码中不能再修改该常量的值

var

let

const

函数级作用域

块级作用域

块级作用域

变量提升

不存在变量提升

不存在变量提升

值可更改

值可更改

值不可更改

构赋值

ES6中允许从数组中提取值,按照对应位置,对变量赋值。对象也可以实现解构。

数组解构

let [a, b, c] = [1, 2, 3];
 console.log(a)
 console.log(b)
 console.log(c) 

 如果解构不成功,变量的值为undefined

let [foo] = [];
 let [bar, foo] = [1];

按照一定模式,从数组中或对象中提取值,将提取出来的值赋值给另外的变量。

对象解构

let person = { name: 'zhangsan', age: 20 }; 
 let { name, age } = person;
 console.log(name); // 'zhangsan' 
 console.log(age); // 20

let {name: myName, age: myAge} = person; // myName myAge 属于别名
 console.log(myName); // 'zhangsan' 
 console.log(myAge); // 20

 这种用法我理解为重命名 

箭头函数

ES6中新增的定义函数的方式。

() => {} 
const fn = () => {}

函数体中只有一句代码,且代码的执行结果就是返回值,可以省略大括号

 function sum(num1, num2) { 
     return num1 + num2; 
 }
 const sum = (num1, num2) => num1 + num2; 

 如果形参只有一个,可以省略小括号

function fn (v) {
     return v;
 } 
 const fn = v => v;

 箭头函数不绑定this关键字,箭头函数中的this,指向的是函数定义位置的上下文this

const obj = { name: '张三'} 
 function fn () { 
     console.log(this);
     return () => { 
         console.log(this)
     } 
 } 
 const resFn = fn.call(obj); 
 resFn();

(331条消息) JS-箭头函数中的this的指向_zhq2005095的博客-CSDN博客_箭头函数this指向问题阮一峰 

 箭头函数自身是没有this,而是箭头函数定义区域的this。当前定义在对象里面,对象是无法产生作用域,这个箭头函数定义在全局下,也就是window下 

剩余参数

剩余参数语法允许我们将一个不定数量的参数表示为一个数组。

 function sum (first, ...args) {
     console.log(first); // 10
     console.log(args); // [20, 30] 
 }
 sum(10, 20, 30)

 剩余参数和解构配合使用

let students = ['wangwu', 'zhangsan', 'lisi'];
 let [s1, ...s2] = students; 
 console.log(s1);  // 'wangwu' 
 console.log(s2);  // ['zhangsan', 'lisi']

 

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

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

相关文章

基于最大熵图像插值Maximum Entropy插值算法的图像超分辨重构研究-附Matlab代码

⭕⭕ 目 录 ⭕⭕✳️ 一、引言✳️ 二、图像复原基本原理✳️ 三、最大熵图像插值原理✳️ 四、实验验证✳️ 五、参考文献✳️ 六、Matlab程序获取与验证✳️ 一、引言 图像是一种表达信息的形式&#xff0c;其中&#xff0c;数字图像反馈的信息更加丰富。 在获取图像的过程中…

基于N32G45的按键驱动

基于N32G45的按键驱动 1.N32G45简介 N32G45系列集成了最新一代嵌入式ARM Cortex™-M4F处理器&#xff0c;在Cortex™-M3内核的基础上强化了运算能力、新增加了浮点运算处理单元&#xff08;FPU&#xff09;、DSP和并行计算指令&#xff0c;提供1.25DMIPS/MHz的优异性能。同时其…

JAVA复习【11】单列集合Collection:ArrayList、 LinkedList、HashSet、TreeSet学习与使用

1.首先思考一个问题&#xff1a;为什么要有集合&#xff1f; 我们也知道&#xff0c;数组可以保存多个对象&#xff0c;但是在某些情况下无法确定到底需要保存多少个对象&#xff0c;此时数组不再适用没因为数组的长度不可变&#xff0c;例如&#xff0c;要保存一个学校的学生信…

移动WEB开发之rem布局--less基础

维护 css 的弊端 CSS 是一门非程序式语言&#xff0c;没有变量、函数、SCOPE&#xff08;作用域&#xff09;等概念。 CSS 需要书写大量看似没有逻辑的代码&#xff0c;CSS 冗余度是比较高的。 不方便维护及扩展&#xff0c;不利于复用。 CSS 没有很好的计算能力 非前端开…

前馈神经网络与支持向量机实战 --- 手写数字识别

前馈神经网络与支持向量机实战 — 手写数字识别 文章目录前馈神经网络与支持向量机实战 --- 手写数字识别一、前馈神经网络介绍二、支持向量机介绍三、数据集说明四、环境准备五、实验要求六、Python代码tutorial_minst_fnn-keras.py&#xff1a;使用TensorFlow的Sequential实现…

Linux开发常用ps命令选项详解

【摘要】本文介绍了在Linux应用/内核开发调试中&#xff0c;经常需要用到的两个选项组合&#xff0c;当然&#xff0c;如果你需要查看更多更详尽的选项说明&#xff0c;可以参考man说明文档&#xff0c;即命令行下输入man ps进行查看。 aux选项组合 使用场景&#xff1a;更多…

算法日常训练12.4(最接近目标价格甜点成本)

只能说回溯实在是诡异&#xff0c;刚看到这题目思路一点不清晰&#xff0c;想着用回溯想到一点写一点&#xff0c;就这样诡异的出来了。 主要回溯思想&#xff0c;由于冰淇淋基料只能选一种&#xff0c;那就对数组遍历&#xff0c;每次对一种冰淇淋基料继续回溯&#xff0c;用r…

Proxmox VE 修改集群名称

作者&#xff1a;田逸&#xff08;formyz) Proxmox VE集群一旦创建&#xff0c;其集群的名称就固定下来。在Proxmox VE Web管理后台&#xff0c;没有相应的菜单或按钮对应与集群名称的修改&#xff08;仅仅发现修改虚拟机选项有修改名称的地方&#xff09;。在宿主系统Debian下…

网课题库接口

网课题库接口 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 题库&#xff1a;题库后台&#xff08;点击跳转&#xff09; 题库…

[附源码]计算机毕业设计文曦家教预约系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

java计算机毕业设计ssm社团管理系统9e73v(附源码、数据库)

java计算机毕业设计ssm社团管理系统9e73v&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。…

计及新能源出力不确定性的电气设备综合能源系统协同优化(Matlab代码实现)

目录 第一部分 文献一《计及新能源出力不确定性的电气设备综合能源系统协同优化》 0 引言 &#xff11; 新能源出力不确定性处理 1.1 新能源出力预测误差分布 1.2 新能源出力的时间相关性 1.3 场景生成 &#xff12; 计及温控负荷调节能力的电气综合能源系统协同优化建模…

[附源码]计算机毕业设计文具商城购物系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【计算机毕业设计】基于JSP的毕业设计选题系统的设计与实现

分类号&#xff1a;TP315 U D C&#xff1a;D10621-408-(2007) 498-0 密 级&#xff1a;公 开 编 号&#xff1a;2002211105 成都信息工程学院 学位论文 基于JSP的毕业设计选题系统的设计与实现 摘 要 随着全球信息化技术的兴起&#xff0c;特别是Internet的日益普及&…

python -- PyQt5(designer)中文详细教程(四)事件和信号

事件 signals and slots也 被其他⼈翻译成信号和槽机制。 所有的应用都是事件驱动的。事件大部分都是由用户的行为产⽣的&#xff0c;当然也有其他的事件产生方式&#xff0c;比如网络的连接&#xff0c;窗口管理器或者定时器等。调⽤应⽤的exec_()⽅法时&#xff0c;应⽤会进⼊…

Python金融领域人工智能教程

Python金融领域人工智能教程 财务分析、时间序列分析、投资组合优化、CAPM、算法交易、Q-Learning 等等&#xff01; 课程英文名&#xff1a;Financial Engineering and Artificial Intelligence in Python 此视频教程共6.0小时&#xff0c;中英双语字幕&#xff0c;画质清晰…

[附源码]Python计算机毕业设计Django网咖管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

ElementUI中Tree组件使用

首先官网上的树形控件教程地址为Element - The worlds most popular Vue UI framework 案例一&#xff1a; 要实现这种类型的树控件&#xff0c;并且后边相关操作&#xff1a; 1.1后端准备工作 首先&#xff0c;数据库表为&#xff1a; 查询接口返回的实体类为&#xff1a; …

给出32位有符号整数,将这个整数翻转

例1 收入123 输出321 例2 输入-123 输出-321 例3 输入120 输出21 答案 思路&#xff0c; 1、先考虑末尾是0的情况时&#xff0c;翻转后需要把0去掉&#xff0c; 2、当有-号时&#xff0c;把翻转后末尾的-号去掉&#xff0c;再在前面加一个-号 3、正数时不变 a -564…

轻松掌握线性代数-万字长文基础知识概览

轻松掌握线性代数-万字长文基础知识概览1 集合相关知识1.1 映射与像1.2 映射与像1.3 线性映射2 矩阵2.1 特殊矩阵2.1.1 零矩阵2.1.2 转置矩阵2.1.3 对称矩阵2.1.4 上三角矩阵2.1.5 下三角矩阵2.1.6 对角矩阵2.1.7 单位矩阵2.1.8 逆矩阵2.2 行列式2.2.1 根据行列式判断是否可逆2…