深入浅出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 相关文章推荐
JavaScript的public、private和privileged模式
Dec 28 Javascript
仅img元素创建后不添加到文档中会执行onload事件的解决方法
Jul 31 Javascript
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
May 24 Javascript
THREE.JS入门教程(2)着色器-上
Jan 24 Javascript
js 调用百度地图api并在地图上进行打点添加标注
May 13 Javascript
js实现带有介绍的Select列表菜单实例
Aug 18 Javascript
jquery马赛克拼接翻转效果代码分享
Aug 24 Javascript
基于jQuery实现的QQ表情插件
Aug 25 Javascript
Parcel.js + Vue 2.x 极速零配置打包体验教程
Dec 24 Javascript
JavaScript面向对象程序设计创建对象的方法分析
Aug 13 Javascript
vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作
Aug 06 Javascript
原生JS生成指定位数的验证码
Oct 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生成随机数的三种方法
2014/09/10 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
Yii框架小部件(Widgets)用法实例详解
2020/05/15 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
firefox firebug中文入门教程 脚本之家新年特别版
2010/01/02 Javascript
formvalidator验证插件中有关ajax验证问题
2013/01/04 Javascript
js给dropdownlist添加选项的小例子
2013/03/04 Javascript
jquery实现树形二级菜单实例代码
2013/11/20 Javascript
JS中数组Array的用法示例介绍
2014/02/20 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
JS及JQuery对Html内容编码,Html转义
2017/02/17 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
2017/09/26 Javascript
解决Vue 浏览器后退无法触发beforeRouteLeave的问题
2017/12/24 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
Vue SSR 组件加载问题
2018/05/02 Javascript
学习React中ref的两个demo示例
2018/08/14 Javascript
原生JS+HTML5实现的可调节写字板功能示例
2018/08/30 Javascript
JavaScript中import用法总结
2019/01/20 Javascript
vue 实现单选框设置默认选中值
2019/11/07 Javascript
微信公众号H5之微信分享常见错误和问题(小结)
2019/11/14 Javascript
node.js中事件触发器events的使用方法实例分析
2019/11/23 Javascript
关于Django显示时间你应该知道的一些问题
2017/12/25 Python
Python利用公共键如何对字典列表进行排序详解
2018/05/19 Python
查看Python依赖包及其版本号信息的方法
2019/08/13 Python
pip安装tensorflow的坑的解决
2020/04/19 Python
HTML5语音识别标签写法附图
2013/11/18 HTML / CSS
澳大利亚最好的在线时尚精品店:Princess Polly
2018/01/03 全球购物
管理建议书范文
2014/05/13 职场文书
大学教师师德师风演讲稿
2014/08/22 职场文书
教师政风行风自查自纠报告
2014/10/21 职场文书
酒店圣诞节活动总结
2015/05/06 职场文书
2015年高一班主任工作总结
2015/05/13 职场文书
市级三好生竞选稿
2015/11/21 职场文书
六年级作文之家庭作文
2019/12/12 职场文书
python利用pandas分析学生期末成绩实例代码
2021/07/09 Python