ES6,小笔记

ES6 学习笔记 ES6 引入了许多新特性,如let/const解构表达式箭头函数Promise等,极大地提升了 JavaScript 的开发效率和代码可读性。掌握这些新特性,能够帮助我们编写更加现代化和高效的 JavaScript 代码。 阅读详情
拜读了阮大神的 《ECMAScript 6入门》 一书,非常易懂,做一下笔记。

一、什么是ES6?
        ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在2015年6月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

二、ES6和ECMAScript 2015有什么关系?
        ES6 的第一个版本,2015年6月发布,正式名称就是《ECMAScript 2015标准》(简称 ES2015)。
        ES6 既是一个历史名词,也是一个泛指,含义是5.1版以后的 JavaScript 的下一代标准,涵盖了ES2015、ES2016、ES2017等等。
        而ES2015 则是正式名称,特指该年发布的正式版本的语言标准。一般是指 ES2015 标准,但有时也是泛指“下一代 JavaScript 语言”。

三、什么是Babel转码器?
        Babel是一个广泛使用的ES6转码器,可以将ES6代码转为ES5代码,从而在现有环境执行。这意味着,你可以用ES6的方式编写程序,又不用担心现有环境是否支持。

四、ES6新增了什么?
        1、变量和变量的作用域(定义变量加入了 let const)
        2、解构赋值
        3、字符串的扩展
        4、正则的扩展
        5、数值的扩展
        6、数组的扩展
        7、函数的扩展
        8、对象的扩展
        9、Symbol
      10、Set 和 Map 数据结构
      11、Proxy
      12、Reflect
      13、Promise 对象
      14、Iterator 和 for...of 循环
      15、Generator 函数的语法
      16、Generator 函数的异步应用
      17、async 函数
      18、Class
      19、Decorator
      20、Module 的语法
      13、Module 的加载实现
      14、Iterator 和 for...of 循环
      15、Generator 函数的语法
      16、Generator 函数的异步应用
      17、async 函数

五、什么是let?
        ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
        for循环的计数器,就很合适使用let命令。

六、let有哪些特性?
        1、let声明的变量只在它所在的代码块有效。
        

   
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
a  // ReferenceError: a is not defined.
b  // 1
//片断2
for  ( let  i  =  0 ;  i  <  10 ;  i ++ )  { }
console . log ( i ) ;
//ReferenceError: i is not defined
//计数器i只在for循环体内有效,在循环体外引用就会报错。
//片断3
var  a  =  [ ] ;
for  ( var  i  =  0 ;  i  <  10 ;  i ++ )  {
   a [ i ]  =  function  ( )  {
     console . log ( i ) ;
   } ;
}
a [ 6 ] ( ) ;  // 10
//变量i是var声明的,在全局范围内都有效。所以每一次循环,新的i值都会覆盖旧值,导致最后输出的是最后一轮的i的值。
//片断4
var  a  =  [ ] ;
for  ( let  i  =  0 ;  i  <  10 ;  i ++ )  {
   a [ i ]  =  function  ( )  {
     console . log ( i ) ;
   } ;
}
a [ 6 ] ( ) ;  // 6
//变量i是let声明的,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量,所以最后输出的是6。你可能会问,如果每一轮循环的变量i都是重新声明的,那它怎么知道上一轮循环的值,从而计算出本轮循环的值?这是因为 JavaScript 引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就在上一轮循环的基础上进行计算。
//片断5
for  ( let  i  =  0 ;  i  <  3 ;  i ++ )  {

        2、不存在变量提升(声明提前)
        let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。
        

   
1
2
3
4
5
6
7
8
9
10
// var 的情况
console . log ( foo ) ;  // 输出undefined
var  foo  =  2 ;
// let 的情况
console . log ( bar ) ;  // 报错ReferenceError
let  bar  =  2 ;
//上面代码中,变量foo用var命令声明,会发生变量提升,即脚本开始运行时,变量foo已经存在了,但是没有值,所以会输出undefined。变量bar用let命令声明,不会发生变量提升。这表示在声明它之前,变量bar是不存在的,这时如果用到它,就会抛出一个错误。

        3、暂时性死区
        ES6明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
        也就是说,凡是let 存在的块级作用域,他所声明的变量,不再与作用域外的同名变量有关系,并且,在作用域内let声明之前使用此变量,也会报错。
        let一旦出现,使用变量就必须遵从let,并且在let之后。对外,将在外,君令有所不受;对内,非令不行。

        “暂时性死区”也意味着typeof不再是一个百分之百安全的操作。
        在没有let之前,如果一个变量根本没有被声明,使用typeof反而不会报错。
          typeof undeclared_variable // "undefined"
        在使用let后,
           typeof x; // ReferenceError
           let x;
        变量x使用let命令声明,所以在声明之前,都属于x的“死区”,只要用到该变量就会报错。因此,typeof运行时就会抛出一个ReferenceError。

        ES6规定暂时性死区和let、const语句不出现变量提升,主要是为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为。这样的错误在 ES5 是很常见的,现在有了这种规定,避免此类错误就很容易了。
        总之,暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。
        4、不允许重复声明
        let不允许在相同作用域内,重复声明同一个变量。因此,不能在函数内部重新声明参数。

   
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 报错
function  ( )  {
   let  a  =  10 ;
   var  a  =  1 ;
}
// 报错
function  ( )  {
   let  a  =  10 ;
   let  a  =  1 ;
}
function  func ( arg )  {
   let  arg ;  // 报错
}
function  func ( arg )  {
   {
     let  arg ;  // 不报错
   }
}

七、块级作用域
        1、为什么需要块级作用域?
        ES5只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。
        第一种场景,内层变量可能会覆盖外层变量。

   
1
2
3
4
5
6
7
8
9
10
var  tmp  =  new  Date ( ) ;
function  f ( )  {
   console . log ( tmp ) ;
   if  ( false )  {
     var  tmp  =  "hello world" ;
   }
}
f ( ) ;  // undefined

        上面代码中,函数f执行后,输出结果为undefined,原因在于变量提升,导致内层的tmp变量覆盖了外层的tmp变量。

        第二种场景,用来计数的循环变量泄露为全局变量。

   
1
2
3
4
5
6
7
var  s  =  'hello' ;
for  ( var  i  =  0 ;  i  <  s . length ;  i ++ )  {
   console . log ( s [ i ]) ;
}
console . log ( i ) ;  // 5

        上面代码中,变量i只用来控制循环,但是循环结束后,它并没有消失,泄露成了全局变量。
        2、ES6的块级作用域
                  
  1. ES6允许块级作用域的任意嵌套。外层作用域无法读取内层作用域的变量。
  2. 内层作用域可以定义外层作用域的同名变量。
  3. 块级作用域的出现,实际上使得获得广泛应用的立即执行函数表达式(IIFE)不再必要了。
    
         
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // IIFE 写法
    ( function  ( )  {
       var  tmp  =  ...;
       ...
    } ( )) ;
    // 块级作用域写法
    {
       let  tmp  =  ...;
       ...
    }
  4. ES6 的块级作用域允许声明函数的规则,只在使用大括号的情况下成立,如果没有使用大括号,就会报错。
  5. 考虑到环境导致的行为差异太大,应该避免在块级作用域内声明函数。如果确实需要,也应该写成函数表达式,而不是函数声明语句。
    
         
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // 函数声明语句
    {
       let  a  =  'secret' ;
       function  f ( )  {
         return  a ;
       }
    }
    // 函数表达式
    {
       let  a  =  'secret' ;
       let  f  =  function  ( )  {
         return  a ;
       } ;
    }

        3、do 表达式
       本质上,块级作用域是一个语句,将多个操作封装在一起,没有返回值。在块级作用域以外,没有办法得到t的值,因为块级作用域不返回值,除非t是全局变量。
       现在有一个提案,使得块级作用域可以变为表达式,也就是说可以返回值,办法就是在块级作用域之前加上do,使它变为do表达式。

   
1
2
3
4
let  x  =  do  {
   let  t  =  f ( ) ;
   t  *  t  +  1 ;
} ;

       上面代码中,变量x会得到整个块级作用域的返回值
超详细的ES6学习笔记 ES6笔记 1.let和const关键字 2.解构赋值 ​3.函数 4.数组 5.字符串 6. 对象 7. Promise 对象 阅读详情

相关推荐

ES6学习笔记

ES6小马哥视频讲解笔记,仅用于记录个人学习笔记,所写笔记比较基础详细,适合小白。因为本人也是小白一枚,内容有写的不对的地方也欢迎帮忙指出,内容会随着学习持续补充更新和完善。

mer0304的博客 1252

es6 基础总结

es6中的变量声明:新增let命令,用于声明变量,用法类似于var 但是所声明的变量只在let命令所在的代码块内有效, { let a = 10;   var b = 1; } a is not defined, b // 1 for(let i=0;i } console.log(i)    //  i   is   not    defined      这段代

qq_16989087的博客 463

【全开源】教育培训微信小程序源码(FastAdmin+ThinkPHP+Unipp)

教育培训微信小程序源码以其便捷性、互动性、安全性等优势,成为了教育培训行业的新宠。随着移动互联网技术的不断发展,教育培训微信小程序源码将继续引领未来学习趋势,为学员提供更加优质、高效的学习体验。同时,教育培训机构也应积极拥抱小程序技术,利用源码打造具有自身特色的学习平台,提升品牌影响力和市场竞争力。

2401_84414018的博客 2097

ES6学习笔记(11)--ES6对象

引言:对象这里比较简单,但是还是记一下笔记吧 1.对象 ES5这么写 var a = 1; var b = 2; var obj = { a:a, b:b } 但是ES6可以这么写 var a = 1; var b = 2; var obj = { a, b } 2.key值构建 可用在未确定key的情况 let key = 'name...

YmwWow的博客 267

基于STM32的多模态智能风扇控制系统设计与实现

本文详细介绍了基于STM32单片机的多模态智能风扇控制系统的设计与实现。系统集成了红外遥控、蓝牙手机控制及人体感应等多模态交互方式,通过PWM技术实现无级调速,并设计了安全优先的控制逻辑。文章从硬件选型、核心原理、软件编程到系统调试,提供了完整的实战指南,适合嵌入式开发爱好者学习与实践。

weixin_28285943的博客 238

用Coze平台30分钟打造《花光10亿》小游戏:零代码AI开发实战

本文详细介绍了如何利用字节跳动推出的Coze平台,在30分钟内零代码开发一款名为《花光10亿》的AI小游戏。通过配置提示词、集成图像生成插件、构建自动化工作流以及使用数据库功能,即使没有编程基础的用户也能快速将创意转化为可交互的智能应用,体验AI开发的便捷与高效。

weixin_29313547的博客 206

ES6/ES2015学习笔记

ES6/ES2015学习笔记概述语法Arrow Function箭头函数(=>) 概述 自用ES6/ES2015学习笔记。 语法 Arrow Function箭头函数(=>) //1. 基本用法: x => x * x //相当于 function (x) { return x * x; } //2. 包含多条语句,不能省略{ ... }和return: x => { if (x > 0) { return x * x; }

qq_41113339的博客 262

车载以太网测试技术解析

在智能汽车与HiL测试领域,高效解析与模拟车载网络通信是开发验证的关键。ZD-Converter 2000以媒体/介质转换器、嗅探器、拦截器、仿真器四合一的颠覆性设计,成为工程师应对复杂车载以太网测试的瑞士军刀。它支持双路车载/标准以太网智能转换、实时通信嗅探、硬件级数据拦截及ECU通信模拟,更通过串口命令实现全参数远程配置,赋能自动化测试流程。本文将深度解析其核心功能与实战应用场景。

Triv2025的博客 1142

1、ES6笔记之let声明变量

笔记代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-...

Candy_mi的博客 756

【系统架构设计师】2025年下半年真题论文回忆版及写作要点

本文摘要围绕云原生数据库、性能测试、无服务器架构和秒杀场景等关键技术进行论述。云原生数据库通过容器化、微服务和自动化运维实现弹性扩展;性能测试需要规划测试场景并关注响应时间等关键指标;无服务器架构以事件驱动为核心,简化开发流程;秒杀场景需组合运用扩容、缓存、限流等技术应对高并发。这些技术方案为构建现代高可用系统提供了重要参考。

数据知道的博客 6156

yocto系列讲解[实战篇]54 - 添加Qt5和生成带Qt5的SDK

为了满足读者盆友想看yocto如何添加qt5的需求,今天就开始尝试添加meta-qt5

fulinux的博客 3868

ES6-学习笔记

在学习ES6时做下的笔记,因为个人习惯,一些笔记写在代码中

2401_83884421的博客 1092

Amazon SES 移出沙盒完整指南 & 高通过率模板

AWS SES沙盒模式转正式模式申请指南 申请正式模式需通过AWS审核,常见被拒原因包括邮件用途不清晰、缺少退订机制或发送量不合理。人工申诉需登录AWS Support Center提交服务限额提升请求,填写详细的公司信息、邮件用途及合规措施。 高通过率申诉模板需包含: 公司信息:名称、网址及与AWS的合作情况。 邮件规范:明确类型(交易/营销)、退订链接及退信处理机制。 发送计划:合理预估发送量,确保合规。 关键点:真实信息、用途清晰、退订机制完善、发送量合理。首次被拒可修改后重新提交。

xianyinsuifeng的博客 327

ES6笔记3

09 Set集合数据类型 10 Map数据类型 11 数组的扩展方法一 12 数组的扩展方法二

yangzhi_emo的博客 257

数字电视中的AD(Audio Description)音频描述技术详解

AD(Audio Description)音频描述是一种辅助技术,旨在帮助视障人士更好地理解视觉内容。通过在节目或视频的自然停顿处插入额外的语音叙述来解释屏幕上的视觉信息,如人物动作、场景变化、文字说明等,从而让视力受损的人士也能获得完整的观影体验。AD服务不仅限于电视广播,也广泛应用于电影、剧院表演、在线视频平台等领域。PID:用于标识和区分不同的音频流。PMT表:提供每个音频流的详细信息,包括PID、编解码器类型和语言代码。时间戳:PTS和DTS用于同步音频与视频内容。解复用。

以实战经验介绍行业知识 739

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

2、ES6笔记之const声明变量

笔记代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-...

Candy_mi的博客 590

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

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

ES6尚硅谷学习笔记

B站ES6尚硅谷课程学习笔记

presentD的博客 742

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

ES6笔记-《ECMAScript 6 入门》

看文档重新学习发现了挺多没注意到的细节

2301_76603086的博客 890

ES6 入门笔记

本笔记参考小马视频https://www.bilibili.com/video/av24664888?p=2 一、概要 ECMAScript2015(ES6)是Javascript最标准的语法式样,是在2015年6月由Ecma国籍组织公布的最新版本,现在已经被多个领域和浏览器所广泛采纳和使用。 1、新特性 * class类定义 * import/export模块化 * 函数定义方法改进...

Shawn的博客 290

ES6笔记

ES的全称是:ECMAScript,它是ECMA国际标准化组织制定的一项脚本语言的标准规范2015年6月:ES20152016年6月:ES20162017年6月:ES20172018年6月:ES2018() => {} //() 代表是函数 => 必须要的符号,指向哪一个代码块 {}表示函数体const fn = () => {} //代表把一个函数赋值给了fn。

maoshunsheng的博客 2078

ES6学习笔记(8)--箭头函数的使用

引言:谈不上说写了ES5几年,但是在ES6中使用的箭头函数看起来就是比ES5爽,然后学习ES6的语法,后期我的编程当中会一直使用ES6,这样才可以进步 开始学习 1.以下是ES5的函数写法 function name(firstName,lastName){ return firstName+' '+ lastName; } console.log(name('yang','...

YmwWow的博客 833

es6学习笔记

11.15 星期三学习地址:ECMAScript 6 入门 http://es6.ruanyifeng.com/ 阮一峰下载node js,Node JS环境搭建及sublime Text 3配置Node Js环境,添加前端插件。一、es6简介: 二者关系:ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现(另外的 ECMAScript 方言...

jyf_568的博客 436

前端笔记之es6

aa67567456的博客 167

ES6学习笔记(5)--字符串模板

引言:在ES6中提供了一个字符串模板,这个笔记中将列出ES5和ES6对字符串的操作。 开始学习 1.ES5对字符串的拼接 var str1 = 'tony'; var str2 = "hello!"+str1+",welcome to my home" console.log(str2); 2.ES6对字符串的拼接 let str1 = 'tony'; let str2 = ...

YmwWow的博客 350

ES6入门学习笔记

ES6学习笔记 学习开课吧 石川老师视频教程 兼容性 各大浏览器的最新版本,对 ES6 的支持可以查看kangax.github.io/compat-table/es6/。随着时间的推移,支持度已经越来越高了,超过 90%的 ES6 语法特性都实现了。 ES6(ES2015)——IE10+、Chorme、FirFox、移动端、NodeJS 编译转换: 在线转换 提前编译(babel==brows...

hen1183392934的博客 338
上一篇: 如何解决PC端和移动端自适应问题?
下一篇: Final Cut Pro X 10.5软件打开失败,直接闪退问题。
drl1210
博客等级 码龄10年 26粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值