深入浅出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中处理带有命名空间的XML数据
Jun 13 Javascript
jquery win 7透明弹出层效果的简单代码
Aug 06 Javascript
自己使用jquery写的一个无缝滚动的插件
Apr 30 Javascript
详解addEventListener的三个参数之useCapture
Mar 16 Javascript
jQuery实现文本展开收缩特效
Jun 03 Javascript
jquery实现可旋转可拖拽的文字效果代码
Jan 27 Javascript
浅谈javascript中new操作符的原理
Jun 07 Javascript
整理关于Bootstrap警示框的慕课笔记
Mar 29 Javascript
Vue实现一个返回顶部backToTop组件
Jul 25 Javascript
Vue 自定义动态组件实例详解
Mar 28 Javascript
vue2.0页面前进刷新回退不刷新的实现方法
Jul 31 Javascript
vuex页面刷新导致数据丢失的解决方案
Dec 10 Vue.js
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读取文件内容的几种方法详解
2013/06/26 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
2015/04/22 PHP
PHP写API输出的时用echo的原因详解
2019/04/28 PHP
javascript在子页面中函数无法调试问题解决方法
2014/01/17 Javascript
BootStrap glyphicon图标无法显示的解决方法
2016/09/06 Javascript
Javascript 实现计算器时间功能详解及实例(二)
2017/01/08 Javascript
Node.js实现文件上传的示例
2017/06/28 Javascript
Angularjs的启动过程分析
2017/07/18 Javascript
vue父组件向子组件传递多个数据的实例
2018/03/01 Javascript
vue.js中created方法作用
2018/03/30 Javascript
elementUI select组件默认选中效果实现的方法
2019/03/25 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
[40:03]RNG vs VG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python常用时间操作总结【取得当前时间、时间函数、应用等】
2017/05/11 Python
Python实现文件内容批量追加的方法示例
2017/08/29 Python
Django unittest 设置跳过某些case的方法
2018/12/26 Python
解决django服务器重启端口被占用的问题
2019/07/26 Python
pytorch 实现cross entropy损失函数计算方式
2020/01/02 Python
Django中文件上传和文件访问微项目的方法
2020/04/27 Python
Python实现树莓派摄像头持续录像并传送到主机的步骤
2020/11/30 Python
pandas map(),apply(),applymap()区别解析
2021/02/24 Python
美国在线健康和美容市场:Pharmapacks
2018/12/05 全球购物
商务日语毕业生自荐信范文
2013/11/14 职场文书
农业资源与环境专业自荐信范文
2013/12/30 职场文书
给物业的表扬信
2014/01/21 职场文书
致长跑运动员加油稿
2014/02/20 职场文书
生产工厂门卫岗位职责
2014/09/26 职场文书
故宫英文导游词
2015/01/31 职场文书
2015年妇联工作总结范文
2015/04/22 职场文书
学校禁毒宣传活动总结
2015/05/08 职场文书
2015双创工作总结
2015/07/24 职场文书
中学政教处工作总结
2015/08/13 职场文书
2016年母亲节广告语
2016/01/28 职场文书
简历中的自我评价应该这样写!
2019/07/12 职场文书
python如何正确使用yield
2021/05/21 Python
Go语言基础切片的创建及初始化示例详解
2021/11/17 Golang