深入浅出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 相关文章推荐
收集的一些Array及String原型对象的扩展实现代码
Dec 05 Javascript
javascript 实现字符串反转的三种方法
Nov 23 Javascript
详解JavaScript基本类型和引用类型
Dec 09 Javascript
node实现简单的反向代理服务器
Jul 26 Javascript
vue中阻止click事件冒泡,防止触发另一个事件的方法
Feb 08 Javascript
详解Angular5路由传值方式及其相关问题
Apr 28 Javascript
浅谈KOA2 Restful方式路由初探
Mar 14 Javascript
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
Oct 15 Javascript
Element-UI+Vue模式使用总结
Jan 02 Javascript
uni-app如何实现增量更新功能
Jan 03 Javascript
vue中echarts引入中国地图的案例
Jul 28 Javascript
Openlayers绘制地图标注
Sep 28 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
php实现HTML实体编号与非ASCII字符串相互转换类实例
2016/11/02 PHP
基于php中echo用逗号和用点号的区别详解
2018/01/23 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
JQuery设置获取下拉菜单某个选项的值(比较全)
2014/08/05 Javascript
浅谈Javascript中的Function与Object
2015/01/26 Javascript
JavaScript File API文件上传预览
2016/02/02 Javascript
利用js编写响应式侧边栏
2016/09/17 Javascript
详解Vue方法与事件
2017/03/09 Javascript
全面解析jQuery中的$(window)与$(document)的用法区别
2017/08/15 jQuery
JS实现浏览上传文件的代码
2017/08/23 Javascript
jQuery Collapse1.1.0折叠插件简单使用
2017/08/28 jQuery
JS基于递归实现网页版计算器的方法分析
2017/12/20 Javascript
vue+element实现表格新增、编辑、删除功能
2019/05/28 Javascript
JS Math对象与Math方法实例小结
2019/07/05 Javascript
js实现无刷新监听URL的变化示例代码详解
2020/06/03 Javascript
Vue项目接入Paypal实现示例详解
2020/06/04 Javascript
JavaScript canvas实现文字时钟
2021/01/10 Javascript
[00:57]林俊杰助阵DOTA2亚洲邀请赛
2015/01/28 DOTA
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
python实现基于SVM手写数字识别功能
2020/05/27 Python
python web.py开发httpserver解决跨域问题实例解析
2018/02/12 Python
python中copy()与deepcopy()的区别小结
2018/08/03 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
css3实现圆锥渐变conic-gradient效果
2020/02/12 HTML / CSS
Ratchet 模态框的实现
2020/08/19 HTML / CSS
美丽的现代设计家具:2Modern
2018/07/26 全球购物
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
中学生在校期间的自我评价分享
2013/11/13 职场文书
舞蹈教育学专业推荐信
2013/11/27 职场文书
医院学雷锋活动策划方案
2014/02/15 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
年会邀请函范文
2015/01/30 职场文书
离婚案件上诉状
2015/05/23 职场文书