ES6 新增加了两个重要的 JavaScript 关键字 :let  const

先说一下 const :它用于声明一个只读的常量,一旦声明,常量的值就不能改变。

const servicePath = "www.baidu.com";
servicePath = "www.sina.com";
console.log(servicePath);
//Uncaught TypeError: Assignment to constant variable.

由于const声明的是一个只读变量,不可被改变,所以声明变量是就必须赋值,否自也会报错。

const servicePath;
console.log(servicePath);
//Uncaught SyntaxError: Missing initializer in const declaration

要注意的是用const声明的常量如果是一个  Object  ,虽然Object.item不会被改变,但是可以用 Object.push(something)添加数组内容,如果不希望数组被改变,可使用 Object.freeze()将其冻结。

 const arr1 =['apple','banana'];
    arr1.push('orange');
console.log(arr1);
//["apple", "banana", "orange"]
const arr2 = Object.freeze(['apple','banana']);
arr2.push('orange');
console.log(arr2);
//Uncaught TypeError: Cannot add property 2, object is not extensible

let 用法与之前的 var 大致上相同,要注意的几点是:

1. 同一个作用域里, 不能重复定义变量(可以重新赋值) 。

  { }括起来的的区域是一个块级作用域,不同的块级作用域 let 两个相同名字的变量,实际上是两个完全独立没有联系的变量。

 1 function a(){
2   let a = "abc";
3   let b = "abc";
4   let c = 10;
5   console.log(a);// abc
6   function b(){
7     let a = 22;
8     console.log(a);//22
9   }
10   function c(){
11     let a = function(){return 1;}
12     console.log(a);//1
13   }
14   let b = 22;
15   console.log(b);//Identifier 'b' has already been declared
16   c = 15;
17   console.log(c);//15
18 }

2. 没有预解析,不存在变量提升。

 function fn(){
  alert(a); //TDZ开始 暂时性死区
let a = 5; //TDZ 结束
}
fn();
//a is not defined

3. for循环,for循环里面是父级作用域,{ }里面又一个作用域

 var arr1 =[];
for(var i=0; i<10; i++){
   arr1[i]=function(){
   console.log(i);
5   }
6 }
7 arr1[5](); // 9 var arr2 =[];
10 for(let i=0; i<10; i++){
11   arr2[i]=function(){
   console.log(i);
}
14 }
15 arr2[5]();//5

在熟悉 let 和 const 的用法之后 ,建议逐步放弃var的用法,改为使用 let 或者 const。

PS:在顶层作用域下 var 定义变量是属于window的,而 let 和 const  不属于。

ECMAScript(ES) 6 之 let 与 const的更多相关文章

  1. ECMAScript 6中的let和const关键词

    ECMAScript 6中多了两个定义变量的关键词,一个是let,另一个是const,后者顾名思义就是常量定义,前者的作用域范围是块级的. 一般写过js的童鞋都知道,同其他语言一样,JS中的变量作用域 ...

  2. ECMAScript 6 第一天 let和const命令

    ES6新增声明变量的方法let命令,const命令. (ES5只有两种声明变量的方法:var 命令和 function 命令.) let命令,用来声明变量. 与var声明变量不同于: 1.  let声 ...

  3. ECMAScript 6 新特性-set。const

    一.let命令是es6新增的特性,作用与var命令类似,声明变量,不同之处在于声明的变量的作用域为块级作用域.引入let后带来了很多新的特性. 1作用域,es5之前之后函数作用域和全局作用域,let的 ...

  4. ECMAScript 6 入门之let和const的用法

    1.let的用法 1. //查看js的引入路径是否正确 console.log("1:",1) 2. var a=1; let b=2; console.log("a:& ...

  5. ECMAScript 6中的var,let,const

    var的变量提升 console.log(a); //输出undefined ; 他的实际执行顺序是: var a: console.log(a); a= 这就是var的变量提升 const命令的用法 ...

  6. let和const关键词

    ECMAScript 6中的let和const关键词 2013-11-28 21:46 by BarretLee, 21 阅读, 0 评论, 收藏, 编辑 ECMAScript 6中多了两个定义变量的 ...

  7. ECMAScript 6入门

    预计在2014年底,ECMAScript 6将会正式发布,他的草案在13年3月份被冻结,后续提出新特性将会移至ECMASript 7中.目前还没有哪款浏览器实现了ES6的全部内容,兼容性最强的一款要数 ...

  8. ECMAScript 6 简介

    ECMAScript 6 是JavaScript的下一个标准,正处在快速开发之中,大部分已经完成了,预计将在2014年正式发布.Mozilla将在这个标准的基础上,推出JavaScript 2.0. ...

  9. JavaScript简易教程(转)

    原文:http://www.cnblogs.com/yanhaijing/p/3685304.html 这是我所知道的最完整最简洁的JavaScript基础教程. 这篇文章带你尽快走进JavaScri ...

随机推荐

  1. ModelSerializer 使用知识点_serializer.save(project=obj) #外键一定要作为实例传入save函数,否则无法新增成功

    1.有两个模型如下 A.project class Project(models.Model): """ 项目表 """ id = mode ...

  2. 从源码编译安装PCL并运行第一个小例子

    如何通过源码编译方式安装PCL 对于很多想学习PCL的同学而言,往往会被如何安装困扰很长时间.我就是这其中的一员,为了不让大家在安装问题上浪费太多时间,我决心写下这篇小小的随笔,希望对大家有所帮助. ...

  3. java实现微信小程序服务端(登录)

    微信小程序如今被广泛使用,微信小程序按照微信官网的定义来说就是: 微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验. 这就是微信小程序的魅力所在,有 ...

  4. Window、Linux查看本机外网ip

    前言 我们上网用的IP并不一定是本机网卡的IP地址,由于公网IP地址稀少,国内绝大多数电脑上网,一般都是通过拨号或者端口映射.多个内网地址映射到一个公网地址来实现上网的. 目录 1.查看本机网卡ip ...

  5. MUI注

    1.调试模式: 边改边看:左侧显示代码,右侧实时观看修改效果.可以调出“浏览器控制台”观测数据变化效果. 真机运行:电脑和手机都安装“360手机助手”,手机安装“F:\Program Files\HB ...

  6. 案例ORA-00600: internal error code, arguments: [qkaffsindex3], [], [], [], []

    执行更新统计信息语句: exec dbms_stats.gather_schema_stats(ownname=>'LIVE_KS',degree=>2,cascade=>true, ...

  7. ES6正则拓展

    字符串的正则方法 字符串对象共有 4 个方法,可以使用正则表达式:match().replace().search()和split(). ES6 将这 4 个方法,在语言内部全部调用RegExp的实例 ...

  8. JavaScript中this的一些练习

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. C#爬虫之Senlium

    在爬虫过程中,有的网页是动态更新的,有的数据会在页面加载时通过js加载或者用ajax加载,这时候如果只用普通的Request和Response获取的HTML页面将会不完整.所以这时候可以采用Senli ...

  10. Quaternions 四元数

    四元数是一个乱七八糟得到东西还没搞懂搞懂后再补 先添加unity API transform.rotation 是Quaternionlei类并非Vector3向量 不能进行直接转化 那如何将Vect ...