深入浅出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 图片 上一张 下一张 链接效果(续篇)
Apr 20 Javascript
get(0).tagName获得作用标签示例代码
Oct 08 Javascript
学习Bootstrap组件之下拉菜单
Jul 28 Javascript
在JavaScript中call()与apply()区别
Jan 22 Javascript
JSONP跨域请求实例详解
Jul 04 Javascript
angularjs 源码解析之injector
Aug 22 Javascript
Windows系统下安装Node.js的步骤图文详解
Nov 15 Javascript
基于jQuery实现顶部导航栏功能
Dec 27 Javascript
js仿微信公众平台打标签功能
Apr 08 Javascript
Angular.js前台传list数组由后台spring MVC接收数组示例代码
Jul 31 Javascript
全面分析JavaScript 继承
May 30 Javascript
微信小程序实现收货地址左滑删除
Nov 18 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记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
2018/10/25 PHP
用JavaScript实现单继承和多继承的简单方法
2009/03/29 Javascript
Jquery乱码的一次解决过程 图解教程
2010/02/20 Javascript
jquery 回车事件实现代码
2011/08/23 Javascript
Javascript:为input设置readOnly属性(示例讲解)
2013/12/25 Javascript
使用nodejs开发cli项目实例
2015/06/03 NodeJs
JavaScript返回上一页的三种方法及区别介绍
2015/07/04 Javascript
基于Bootstrap重置输入框内容按钮插件
2016/05/12 Javascript
深入理解AngularJS中的ng-bind-html指令
2017/03/27 Javascript
jquery请求servlet实现ajax异步请求的示例
2017/06/03 jQuery
javaScript实现复选框全选反选事件详解
2020/11/20 Javascript
Vue文件配置全局变量的实例
2018/09/06 Javascript
vsCode安装使用教程和插件安装方法
2020/08/24 Javascript
python实现录音小程序
2020/10/26 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
2019/02/22 Python
Python2和3字符编码的区别知识点整理
2019/08/08 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
2019/08/31 Python
Pytorch之finetune使用详解
2020/01/18 Python
python3 字符串知识点学习笔记
2020/02/08 Python
详解pandas获取Dataframe元素值的几种方法
2020/06/14 Python
详解python日志输出使用配置文件格式
2021/02/10 Python
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
奥林匹亚体育:Olympia Sports
2020/12/30 全球购物
介绍下Java的输入输出流
2014/01/22 面试题
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
JSP和EJB可以共享HttpSession么?EJB里面可以改变session里面的内容
2013/06/05 面试题
Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
2013/10/30 面试题
机电一体化职业规划书
2014/01/07 职场文书
五年级学生评语
2014/04/22 职场文书
多媒体编辑专业毕业生求职信
2014/06/13 职场文书
公司客户答谢酒会祝酒词
2015/08/11 职场文书
详解TypeScript中的类型保护
2021/04/29 Javascript
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python
一次SQL查询优化原理分析(900W+数据从17s到300ms)
2022/06/10 SQL Server