深入浅出ES6之let和const命令


Posted in Javascript onAugust 25, 2016

let和const声明的变量只在代码块内有效

{
let a = 10;
var b = 1;
}
a // ReferenceError: a is not defined.
b // 1

不存在变量提升

变量一定要在声明后使用,否则报错

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

不允许重复声明

// 报错
function () {
let a = 10;
var a = 1;
}

块级作用域

function f() { console.log('I am outside!'); }
(function () {
if(false) {
// 重复声明一次函数f
function f() { console.log('I am inside!'); }
}
f();
}());
//I am inside! ES5 函数提升
//I am outside! ES6 块级作用域

const命令

声明一个只读的常量,一旦声明,常量的值就不能改变

一旦声明变量,就必须立即初始化,不能留到以后赋值

let命令、const命令、class命令声明的全局变量,不属于全局对象的属性

var a = 1;
// 如果在Node的REPL环境,可以写成global.a
// 或者采用通用方法,写成this.a
window.a // 1
let b = 1;
window.b // undefined

下面再单独给大家介绍ES6之const命令

一直以来以ecma为核心的js始终没有常量的概念,es6则弥补了这一个缺陷;

const foo='foo';
foo='bar';//TypeError: Assignment to constant variable.

上例声明了一个基本类型的常量,如过试图修改初始值则会报错;如果是引用类型的值同样适用,但是有一点需要注意,举例说明:

const foo=[];
foo=[1];//Assignment to constant variable.

正常报错,没毛病,再看:

const foo=[1,2,3];
foo[1]=4;
console.log(foo)//[1, 4, 3]

这怎么没报错?而且还能修改成功? 这两个例子不一样的地方在于前者是修改了指针(需熟悉js 引用类型)对应的内容改变了,后者则不是指向依然没变 但是指向对象的内容发生改变了,对于foo而言我只是一个指针负责指向对应的对象 至于对象内容是什么就不管我的事了所以可以修改;如果不想让内容也改变也行使用另一个方法;

const foo=Object.freeze([1,2,3]);
foo[1]=4;
console.log(foo)//[1, 2, 3]

这样就不用担心被修改了;

Javascript 相关文章推荐
JQuery Dialog的内存泄露问题解决方法
Jun 18 Javascript
extjs 如何给column 加上提示
Jul 29 Javascript
jquery简单实现带渐显效果的选项卡菜单代码
Sep 01 Javascript
JS定义类的六种方式详解
May 12 Javascript
jQuery基础知识点总结(必看)
May 31 Javascript
js实现的xml对象转json功能示例
Dec 24 Javascript
JavaScript在form表单中使用button按钮实现submit提交方法
Jan 23 Javascript
jqGrid翻页时数据选中丢失问题的解决办法
Feb 13 Javascript
jquery请求servlet实现ajax异步请求的示例
Jun 03 jQuery
Angular angular-file-upload文件上传的示例代码
Aug 23 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
Jan 16 Javascript
vue实现动态表格提交参数动态生成控件的操作
Nov 09 Javascript
PhotoSwipe异步动态加载图片方法
Aug 25 #Javascript
相册展示PhotoSwipe.js插件实现
Aug 25 #Javascript
移动端点击图片放大特效PhotoSwipe.js插件实现
Aug 25 #Javascript
手机端图片缩放旋转全屏查看PhotoSwipe.js插件实现
Aug 25 #Javascript
手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果
Aug 25 #Javascript
手机图片预览插件photoswipe.js使用总结
Aug 25 #Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
Aug 25 #Javascript
You might like
海河写的 Discuz论坛帖子调用js的php代码
2007/08/23 PHP
php header功能的使用
2013/10/28 PHP
用js实现手把手教你月入万刀(转贴)
2007/11/07 Javascript
javascript 读取图片文件的大小
2009/06/25 Javascript
jquery Mobile入门—外部链接切换示例代码
2013/01/08 Javascript
各种页面定时跳转(倒计时跳转)代码总结
2013/10/24 Javascript
鼠标滚轮改变图片大小的示例代码
2013/11/20 Javascript
理解JS绑定事件
2016/01/19 Javascript
javascript验证手机号和实现星号(*)代替实例
2016/08/16 Javascript
EditPlus中的正则表达式 实战(4)
2016/12/15 Javascript
Jquery获取radio选中的值
2017/05/05 jQuery
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
手机注册发送验证码倒计时的简单实例
2017/11/15 Javascript
JS运动特效之链式运动分析
2018/01/24 Javascript
Vue实现带进度条的文件拖动上传功能
2018/02/23 Javascript
js中el表达式的使用和非空判断方法
2018/03/28 Javascript
AngularJS日期格式化常见操作实例分析
2018/05/17 Javascript
create-react-app修改为多页面支持的方法
2018/05/17 Javascript
在iFrame子页面里实现模态框的方法
2018/08/17 Javascript
[09:37]DOTA2卡尔工作室 英雄介绍圣堂刺客篇
2013/06/13 DOTA
python检查指定文件是否存在的方法
2015/07/06 Python
详解Python中映射类型(字典)操作符的概念和使用
2015/08/19 Python
python在ubuntu中的几种安装方法(小结)
2017/12/08 Python
python利用requests库进行接口测试的方法详解
2018/07/06 Python
网易2016研发工程师编程题 奖学金(python)
2019/06/19 Python
python爬虫模拟浏览器访问-User-Agent过程解析
2019/12/28 Python
Kusmi茶美国官网:优质散叶茶和茶包
2019/10/13 全球购物
广州迈达威.net面试题目
2012/03/10 面试题
MVC的各个部分都有那些技术来实现?如何实现?
2016/04/21 面试题
Laravel中Kafka的使用详解
2021/03/24 PHP
经销商会议欢迎词
2014/01/11 职场文书
护士长竞聘书
2014/03/31 职场文书
战友聚会策划方案
2014/06/13 职场文书
离婚协议书范本样本
2014/08/19 职场文书
银行安全保卫工作总结
2015/08/10 职场文书
2016中考冲刺决心书
2015/09/22 职场文书