深入浅出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 相关文章推荐
网页和浏览器兼容性问题汇总(draft1)
Jun 01 Javascript
JS获取dom 对象 ajax操作 读写cookie函数
Nov 18 Javascript
避免 showModalDialog 弹出新窗体的原因分析
May 31 Javascript
js 函数的副作用分析
Aug 23 Javascript
jquery对table中各数据的增加、保存、删除操作示例
May 14 Javascript
使用jQuery加载html页面到指定的div实现方法
Jul 13 Javascript
Bootstrap被封装的弹层
Jul 20 Javascript
又一枚精彩的弹幕效果jQuery实现
Jul 25 Javascript
JS实现的简单表单验证功能示例
Oct 13 Javascript
vue todo-list组件发布到npm上的方法
Apr 04 Javascript
jquery ui 实现 tab标签功能示例【测试可用】
Jul 25 jQuery
Node.js学习教程之Module模块
Sep 03 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 从数据库提取二进制图片的处理代码
2009/09/09 PHP
php防注入,表单提交值转义的实现详解
2013/06/10 PHP
PHP类继承 extends使用介绍
2014/01/14 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
2014/11/17 PHP
js判断设备是否为PC并调整图片大小
2014/02/12 Javascript
jquery得到iframe src属性值的方法
2014/09/25 Javascript
javascript实现可全选、反选及删除表格的方法
2015/05/15 Javascript
JavaScript对象属性检查、增加、删除、访问操作实例
2015/07/08 Javascript
浅谈$(document)和$(window)的区别
2015/07/15 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
2015/12/16 Javascript
AngularJS使用拦截器实现的loading功能完整实例
2017/05/17 Javascript
使用AngularJS对表单提交内容进行验证的操作方法
2017/07/12 Javascript
JavaScript中关于class的调用方法
2017/11/28 Javascript
解决axios发送post请求返回400状态码的问题
2018/08/11 Javascript
js中this的指向问题归纳总结
2018/11/28 Javascript
bootstrap下拉分页样式 带跳转页码
2018/12/29 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
[04:49]2014DOTA2国际邀请赛 Newbee顺利挺进总决赛 ImbaTV独家专访
2014/07/19 DOTA
[02:50]【扭转乾坤,只此一招】DOTA2永雾林渊版本开启新篇章
2020/12/22 DOTA
Python读取sqlite数据库文件的方法分析
2017/08/07 Python
Python 多核并行计算的示例代码
2017/11/07 Python
Python中py文件引用另一个py文件变量的方法
2018/04/29 Python
在python中利用GDAL对tif文件进行读写的方法
2018/11/29 Python
Python 元组拆包示例(Tuple Unpacking)
2019/12/24 Python
Pytorch中的自动求梯度机制和Variable类实例
2020/02/29 Python
Python接口开发实现步骤详解
2020/04/26 Python
python实现文件+参数发送request的实例代码
2021/01/05 Python
Sneaker Studio匈牙利:购买运动鞋
2018/03/26 全球购物
英国旅行箱包和行李箱购物网站:Travel Luggage & Cabin Bags
2019/08/26 全球购物
历史专业个人求职信分享
2013/12/20 职场文书
出国签证在职证明
2014/01/16 职场文书
超市创业计划书
2014/09/15 职场文书
数学教师个人工作总结
2015/02/06 职场文书
年度考核登记表个人总结
2015/03/06 职场文书
升职自荐书
2019/05/09 职场文书
Win10防火墙白名单怎么设置?Win10添加防火墙白名单方法
2022/04/06 数码科技