ES6也出来好久了,最近闲来无事就想着吧es6做一个系统的总结,巩固自己的知识,丰富一下博客.

为什么叫ES6

  实际上是ECMA的一个打的标准,这个标准是在2015年6月发布的,正式的名字实际是es2015,ecma这个组织规定每年6月份对这个版本进行更新,所以有es2016,es2017,es2018,有的人也称其为es7 es8,当然es6较之前的es5确实做了非常大的更新,对我们开发这也是非常友好

变量的声明

  废话不多扯,进入正题,

  1. //之前的变量声明是js的var声明列如
    var a=1

  在es6中推出来let和const这两个声明变量的关键字

  let          相当于之前的var

  const     常量定义好了不能改变

  在之前只有全局作用域和函数作用域,但是在es6有了块级作用域,(只要遇见{}都可以当做块)

  因此,let和const的作用域只是当前的块

  举个列子:

  之前没有块级作用域的时候

  

  1. var a=1
  2. function f(){
  3. if(false){
  4. var a=2
  5. }
    console.log(a)
  6. }
  7. f()

  不管最后的if执行不执行最后都会输出undefined因为存在预解析,函数内的a提升到函数顶部,因此输出的事undefined

但是当用let定义就不会出现这个问题

  1. var a=1
  2. function f(){
  3. if(false){
  4. let a=2
  5. }
  6. console.log(a)
  7. }
  8. f()

最后输出的一定是1,

从上边可以看出let没有预解析,不存在变量提升,并且作用域仅仅是当前的块,

再举一个典型的例子

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

一秒后输出8个8,要解决就得用闭包

但是用let定义之后

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

用了let之后1秒后输出1,2,3,4,5,6,7,8

还有一个列子

  1. var arr =[];
  2.  
  3. for(var i=0; i<10; i++){
  4. arr[i]=function(){
  5. console.log(i);
  6. }
  7. }
  8.  
  9. arr[5]();//输出的是10
    //用let定义之后
  1. for(let i=0; i<10; i++){
    arr[i]=function(){
    console.log(i);
    }
    }
  2.  
  3. arr[5]();//输出的是5

 还有一个最典型的列子

有三个按钮点击每个按钮弹出按钮的index

  1. <input type="button" value="aaa">
  2. <input type="button" value="bbb">
  3. <input type="button" value="ccc">
    //js
  1. let aInput = document.querySelectorAll('input');
    //用var定义
    for(var=0; i<aInput.length; i++){
    aInput[i].onclick=function(){
    alert(i);
    }
    }
    不管点击哪一个输出的永远是3,相信在实际工作中的都知道这是什么回事,之前解决就是用闭包
    但是用es6之后用一个小小的let就解决了
  1. for(let i=0; i<aInput.length; i++){
    aInput[i].onclick=function(){
    alert(i);
    }
    }

  

const和let的性质一样 只是const一旦定义不可再更改

比如

const a=1

a=2//Assignment to constant variable.  直接报错

let 和const还有一个特点就是在一个块级作用域内定义的变量不能重列如

let a=1

let a=2   //Identifier 'a' has already been declared

ES6系列之变量声明let const的更多相关文章

  1. Nodejs与ES6系列1:变量声明

    1.声明变量 在JS当中一个变量的作用域(scope)是程序中定义这个变量的区域.变量分为两类,全局(global)的和局部的.其中全局变量的作用域是全局性的,即在JavaScript代码中,它处处都 ...

  2. es6中的变量声明

    目录 es6中的变量声明 变量的声明 es6中的变量声明 变量的声明 for (var i = 0; i < 5; i++) { console.log(i) } var声明 作用域问题 上面的 ...

  3. ES6和ES5变量声明的区别(var let const)

    // es5的语法与es6的语法区别 // var let const console.log(name);//undefine,不会报错,因为变量声明会提到作用域的最前面 var name=&quo ...

  4. ES6学习笔记之变量声明let,const

    最近用淘宝的weex做了个项目,最近稍微闲下来了.正好很久没有接触RN了,所以趁这个机会系统的学习一下ES6的相关知识. 孔子说:没有对比就没有伤害.所以我们要拿ES6和ES5好好对比的学习.这样才能 ...

  5. 变量声明---let,const,解构

    let在很多方面与var是相似的,但是可以帮助大家避免在JavaScript里常见一些问题. const是对let的一个增强,它能阻止对一个变量再次赋值. 块作用域 当用let声明一个变量,它使用的是 ...

  6. ES6的强大变量声明

    ES6是javascript的新特性,今天来说说声明变量 过去我们声明变量,都是一个一个声明,现在有了一种新的声明方式,它可以将一个多个变量同时声明,声明后变量同时存在一个集合中,集合的数据类型是对象 ...

  7. TypeScript 变量声明(二)

    ES6 中,变量声明一共有6种,分别是var.function .let.const.class和import. let 基本语法:let 变量名 :类型.其中类型不是必须的. 1.用于声明变量,其用 ...

  8. es6 快速入门 系列 —— 变量声明:let和const

    其他章节请看: es6 快速入门 系列 变量声明:let和const 试图解决的问题 经典的 var 声明让人迷惑 function demo1(v){ if(v){ var color='red' ...

  9. es6系列-变量声明

    es6系列所有文章都是阅读阮一峰老师的<ES6标准入门>(第2版)所做的读书笔记.方便日后查阅相关基础知识. git地址: https://github.com/rainnaZR/es6- ...

随机推荐

  1. Java代码规范与质量检测插件SonarLint

    1.  SonarLint SonarLint是一个代码质量检测插件,可以帮助我们检测出代码中的坏味道 下载与安装 在需要检测的单个文件或者单个项目上右键 --> Analyze --> ...

  2. GC参考手册 —— GC 调优(命令篇)

    运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我们来定位问题!虽然jvm调优成熟的工具已经有很多:jconsole.大名鼎鼎的VisualVM,IBM的Memory Analyzer ...

  3. Python3|ddt|unittest|浅议数据驱动测试

    目录 1.DDT简介 2.data装饰器 3.unpack装饰器 4.file_data装饰器 5.总结 1.DDT简介 Data-Driven Tests(DDT)即数据驱动测试.它允许您通过不同的 ...

  4. LVS的DR模型配置

    LVS的DR模型配置 介绍 下图为DR模型的通信过程,图中的IP不要被扑结构中的IP迷惑,图里只是为了说明DR的通信原理,应用到本例中的拓扑上其工作原理不变. 拓扑结构 服务器 IP地址 角色 Srv ...

  5. CSS引入本地字体与在线字体

    有些时候为了强调某些文字,需要使用一些比较特别的字体,CSS中现在也可以比较方便的引入字体了,如下: /* 定义字体 */ @font-face{ font-family: Arista2; src: ...

  6. 通过命令行设置Windows 时区

    我们在进行自动测试的时候,不同的测试程序对于时区的要求不同,所以在开始的时候需要根据测试程序的要求了设置时区. Windows 提供了一个工具来进行时区设置.tzutil.exe. 目录:C:\Win ...

  7. 「工具」Aquarelo - 来自意大利的色阶管理工具

    Aquarelo是一款小而美的色阶管理工具,由意大利团队开发,包含三个核心功能,可用于色彩管理.色彩搭配等场景. ## 相关参数 * 操作系统:macOS* 工具官网:[Aquarelo for Ma ...

  8. C++ 最简单的日志类

    最近搞一个 C++ 项目的二次开发,没玩过 C++,可谓步履维艰.自己写个简单的日志类都被各种坑折磨.终于搞定了. 参考了这篇博客,并且进一步简化:https://www.cnblogs.com/Ds ...

  9. [转载]PrintDocument,PrintDialog与PrintPreviewDialog用法总结

    一.使用PrintDocument进行打印 using System; using System.Drawing; using System.Drawing.Printing; using Syste ...

  10. Linux 桌面玩家指南:05. 发博客必备的图片处理和视频录制神器

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...