ECMAScript(ES) 6 之 let 与 const
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的更多相关文章
- ECMAScript 6中的let和const关键词
ECMAScript 6中多了两个定义变量的关键词,一个是let,另一个是const,后者顾名思义就是常量定义,前者的作用域范围是块级的. 一般写过js的童鞋都知道,同其他语言一样,JS中的变量作用域 ...
- ECMAScript 6 第一天 let和const命令
ES6新增声明变量的方法let命令,const命令. (ES5只有两种声明变量的方法:var 命令和 function 命令.) let命令,用来声明变量. 与var声明变量不同于: 1. let声 ...
- ECMAScript 6 新特性-set。const
一.let命令是es6新增的特性,作用与var命令类似,声明变量,不同之处在于声明的变量的作用域为块级作用域.引入let后带来了很多新的特性. 1作用域,es5之前之后函数作用域和全局作用域,let的 ...
- ECMAScript 6 入门之let和const的用法
1.let的用法 1. //查看js的引入路径是否正确 console.log("1:",1) 2. var a=1; let b=2; console.log("a:& ...
- ECMAScript 6中的var,let,const
var的变量提升 console.log(a); //输出undefined ; 他的实际执行顺序是: var a: console.log(a); a= 这就是var的变量提升 const命令的用法 ...
- let和const关键词
ECMAScript 6中的let和const关键词 2013-11-28 21:46 by BarretLee, 21 阅读, 0 评论, 收藏, 编辑 ECMAScript 6中多了两个定义变量的 ...
- ECMAScript 6入门
预计在2014年底,ECMAScript 6将会正式发布,他的草案在13年3月份被冻结,后续提出新特性将会移至ECMASript 7中.目前还没有哪款浏览器实现了ES6的全部内容,兼容性最强的一款要数 ...
- ECMAScript 6 简介
ECMAScript 6 是JavaScript的下一个标准,正处在快速开发之中,大部分已经完成了,预计将在2014年正式发布.Mozilla将在这个标准的基础上,推出JavaScript 2.0. ...
- JavaScript简易教程(转)
原文:http://www.cnblogs.com/yanhaijing/p/3685304.html 这是我所知道的最完整最简洁的JavaScript基础教程. 这篇文章带你尽快走进JavaScri ...
随机推荐
- 阿里云ECS服务器socket无法连接的问题
把自己的项目部署到阿里云ecs服务器之后,只有127.0.0.1才能连接到服务器端,检查了阿里云安全组规则,以及socket绑定的地址无误后,发现没有开启服务器防火墙的对应端口. firewall-c ...
- Android学习笔记之Menu的ShowAsAction属性的设置
(1)在res--menu目录下的main.xml文件 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2 ...
- springboot(一).初识springboot以及基本项目搭建
初识springboot 以及基本项目搭建 由于新的项目需要搭建后台框架,之前的springmvc架构也使用多次,在我印象中springboot的微服务架构更轻量级更容易搭建,所以想去试试spring ...
- PTA编程总结一
7-1 币值转换 (20 分) 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成“贰万叁仟壹百零捌”元.为了简化输出,用小写英文字 ...
- bash脚本计算某程序的进程数
脚本里面有时候需要判断某个程序是否启动,以及有几个进程下面用nginx来做实例 显示所有的nignx进程 ps -ef|grep nginx |grep -v grep 其中grep -v grep表 ...
- 浏览器端-W3School:JS & DOM 参考手册
ylbtech-浏览器端-W3School:JS & DOM 参考手册 1.返回顶部 1. JavaScript 参考手册 本部分提供完整的 JavaScript 参考手册: JavaScri ...
- BFC块级格式
BFC块级格式上下文,独立的一个渲染区域 1.同一个BFC的两个相邻盒子间的margin会重叠(垂直方向): 2.BFC内部的盒子在垂直方向上会一个接一个的放置: 3.每个子元素的左外边距与包含块的左 ...
- CSS3——表单 计数器 网页布局 应用实例
CSS应用实例 表单 实例 输入框样式 输入框填充-----内边距 输入框------边框 输入框-----颜色 输入框-----聚焦 输入框-------图标 输入框------动画 [自动右滑] ...
- Jmeter JDBC请求---把数据库结果参数化传递到其他请求
摘要: 最近一个场景进行压力测试:生成商品id进行上下架和购买,记录写脚本的一个过程 1.在商品上架前需要准备商品ID,商品ID生成需要从数据库读取商品类别,从而生成商品ID,下面是从数据库:读取商品 ...
- lsb-realse
[root@localhost ~]# lsb_release -a -bash: lsb_release: command not found 解决方法:yum install redhat-lsb ...