深入浅出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 结合C#后台的数组对文章的关键字自动添加链接的代码
Jul 15 Javascript
初步了解javascript面向对象
Nov 09 Javascript
酷炫jQuery全屏3D焦点图动画效果
Mar 22 Javascript
JavaScript中函数声明与函数表达式的区别详解
Aug 18 Javascript
利用vscode编写vue的简单配置详解
Jun 17 Javascript
把vue-router和express项目部署到服务器的方法
Feb 21 Javascript
JavaScript中 ES6变量的结构赋值
Jul 10 Javascript
实例详解BootStrap的动态模态框及静态模态框
Aug 13 Javascript
微信小程序实现的一键连接wifi功能示例
Apr 24 Javascript
在weex中愉快的使用scss的方法步骤
Jan 02 Javascript
详解JavaScript 事件流
Sep 02 Javascript
vue使用exif获取图片经纬度的示例代码
Dec 11 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来处理多个提交任务
2008/05/08 PHP
laravel自定义分页效果
2017/07/23 PHP
jQuery的Ajax的自动完成功能控件简要说明
2013/02/22 Javascript
js工具方法弹出蒙版
2013/05/08 Javascript
2014最热门的JavaScript代码高亮插件推荐
2014/11/25 Javascript
JavaScript中获取Radio被选中的值
2015/11/11 Javascript
JavaScript职责链模式概述
2016/09/17 Javascript
微信小程序 wxapp画布 canvas详细介绍
2016/10/31 Javascript
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
2017/10/21 Javascript
Angular项目从新建、打包到nginx部署全过程记录
2017/12/09 Javascript
React diff算法的实现示例
2018/04/20 Javascript
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
JavaScript 作用域实例分析
2019/10/02 Javascript
jQuery/JS监听input输入框值变化实例
2019/10/17 jQuery
Python实现端口复用实例代码
2014/07/03 Python
python批量实现Word文件转换为PDF文件
2018/03/15 Python
python如何派生内置不可变类型并修改实例化行为
2018/03/21 Python
Python实现的自定义多线程多进程类示例
2018/03/23 Python
Python3实现腾讯云OCR识别
2018/11/27 Python
ubuntu上安装python的实例方法
2019/09/30 Python
python 解决flask uwsgi 获取不到全局变量的问题
2019/12/22 Python
Pandas 解决dataframe的一列进行向下顺移问题
2019/12/27 Python
Python单链表原理与实现方法详解
2020/02/22 Python
python中id函数运行方式
2020/07/03 Python
python request 模块详细介绍
2020/11/10 Python
美国廉价机票预订网站:Cheapfaremart
2018/04/28 全球购物
经济学人订阅:The Economist
2018/07/19 全球购物
销售简历自我评价
2014/01/24 职场文书
2014年小班元旦活动方案
2014/02/16 职场文书
2014世界杯球队球队口号
2014/06/05 职场文书
校园环境卫生倡议书
2015/04/29 职场文书
2016年五一劳动节专题校园广播稿
2015/12/17 职场文书
银行服务理念口号
2015/12/25 职场文书
《悬崖边的树》读后感2篇
2019/12/02 职场文书
vue3如何优雅的实现移动端登录注册模块
2021/03/29 Vue.js
java项目构建Gradle的使用教程
2022/03/24 Java/Android