深入浅出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学习笔记6 prototype的提出
Jan 11 Javascript
jquery插件冲突(jquery.noconflict)解决方法分享
Mar 20 Javascript
BootStrap的table表头固定tbody滚动的实例代码
Aug 24 Javascript
jQuery+ajax的资源回收处理机制分析
Jan 07 Javascript
react-redux中connect()方法详细解析
May 27 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
Jul 11 Javascript
Vue.js递归组件构建树形菜单
Dec 24 Javascript
vue中v-for加载本地静态图片方法
Mar 03 Javascript
使用Vue.js开发微信小程序开源框架mpvue解析
Mar 20 Javascript
在vue-cli项目中使用bootstrap的方法示例
Apr 21 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
Sep 25 Javascript
BootstrapValidator实现表单验证功能
Nov 08 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
在PHP3中实现SESSION的功能(二)
2006/10/09 PHP
php实现的简单压缩英文字符串的代码
2008/04/24 PHP
基于Zend的Captcha机制的应用
2013/05/02 PHP
Destoon模板制作简明教程
2014/06/20 PHP
destoon安全设置中需要设置可写权限的目录及文件
2014/06/21 PHP
JS 自动完成 AutoComplete(Ajax 查询)
2009/07/07 Javascript
javascript 进度条 实现代码
2009/07/30 Javascript
jquery photoFrame 图片边框美化显示插件
2010/06/28 Javascript
基于MVC3方式实现下拉列表联动(JQuery)
2013/09/02 Javascript
js与jquery获取父元素,删除子元素的两种不同方法
2014/01/09 Javascript
图片翻转效果具体实现代码
2014/01/09 Javascript
JS将光标聚焦在文本最后的实现代码
2014/03/28 Javascript
JS实现双击编辑可修改状态的方法
2015/08/14 Javascript
Jquery操作Ajax方法小结
2015/11/29 Javascript
JS中的forEach、$.each、map方法推荐
2016/04/05 Javascript
详解如何实现一个简单的Node.js脚手架
2017/12/04 Javascript
解决vue build打包之后首页白屏的问题
2018/03/06 Javascript
vue.js内置组件之keep-alive组件使用
2018/07/10 Javascript
微信公众平台 客服接口发消息的实现代码(Java接口开发)
2019/04/17 Javascript
vue axios post发送复杂对象问题
2019/06/04 Javascript
layui table 列宽百分比显示的实现方法
2019/09/28 Javascript
vue总线机制(bus)知识点详解
2020/05/10 Javascript
Python爬虫模拟登录带验证码网站
2016/01/22 Python
对python多线程与global变量详解
2018/11/09 Python
Python 正则表达式爬虫使用案例解析
2019/09/23 Python
文员岗位职责
2013/11/09 职场文书
销售冠军获奖感言
2014/02/03 职场文书
旅行社各个岗位职责
2014/03/15 职场文书
孝老爱亲模范事迹材料
2014/05/25 职场文书
设备管理实施方案
2014/05/31 职场文书
公务员中国梦演讲稿
2014/08/19 职场文书
志愿服务心得体会
2016/01/15 职场文书
《家世》读后感:看家训的力量
2019/12/30 职场文书
python操作xlsx格式文件并读取
2021/06/02 Python
vmware虚拟机打不开vmx文件怎么办 ?vmware虚拟机vmx文件打开方法
2022/04/08 数码科技
python读取mat文件生成h5文件的实现
2022/07/15 Python