深入浅出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 相关文章推荐
js toFixed()方法的重写实现精度的统一
Mar 06 Javascript
简单的jQuery入门指引
Jul 28 Javascript
高效利用Angular中内置服务$http、$location等
Mar 22 Javascript
jQuery文字横向滚动效果的实现代码
May 31 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
Oct 13 Javascript
jQuery插件HighCharts实现气泡图效果示例【附demo源码】
Mar 13 Javascript
JQuery实现ajax请求的示例和注意事项
Dec 10 jQuery
微信小程序 slot踩坑的解决
Apr 01 Javascript
ES6入门教程之let、const的使用方法
Apr 13 Javascript
selenium+java中用js来完成日期的修改
Oct 31 Javascript
nuxt 自定义 auth 中间件实现令牌的持久化操作
Nov 05 Javascript
5个实用的JavaScript新特性
Jun 16 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版微信公众平台之微信网页登陆授权示例
2016/09/23 PHP
php基于PDO实现功能强大的MYSQL封装类实例
2017/02/27 PHP
PDO::inTransaction讲解
2019/01/28 PHP
Javascript----文件操作
2007/01/18 Javascript
Prototype ObjectRange对象学习
2009/07/19 Javascript
关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级
2010/10/14 Javascript
百度判断手机终端并自动跳转js代码及使用实例
2014/06/11 Javascript
JavaScript中isPrototypeOf函数作用和使用实例
2015/06/01 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
AngularJs 60分钟入门基础教程
2016/04/03 Javascript
浅谈js构造函数的方法与原型prototype
2016/07/04 Javascript
AngularJS入门教程之ng-checked 指令详解
2016/08/01 Javascript
原生JS控制多个滚动条同步跟随滚动效果
2017/12/22 Javascript
详解Nodejs mongoose
2018/06/10 NodeJs
vue组件(全局,局部,动态加载组件)
2018/09/02 Javascript
深入理解 JS 垃圾回收
2019/06/03 Javascript
微信小程序之侧边栏滑动实现过程解析(附完整源码)
2019/08/23 Javascript
javascript实现前端分页效果
2020/06/24 Javascript
[00:19]CN DOTA NEVER DIE!VG夺冠rOtK接受采访
2019/12/23 DOTA
在Django的模型和公用函数中使用惰性翻译对象
2015/07/27 Python
机器学习python实战之决策树
2017/11/01 Python
Python实现可自定义大小的截屏功能
2018/01/20 Python
python将txt文件读取为字典的示例
2018/12/22 Python
使用python爬取微博数据打造一颗“心”
2019/06/28 Python
python多任务之协程的使用详解
2019/08/26 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
2019/10/14 Python
Python定义函数实现累计求和操作
2020/05/03 Python
python获取时间戳的实现示例(10位和13位)
2020/09/23 Python
Python爬取股票信息,并可视化数据的示例
2020/09/26 Python
小学毕业家长寄语
2014/01/19 职场文书
财务信息服务专业自荐书范文
2014/02/08 职场文书
幼儿园教师获奖感言
2014/03/11 职场文书
缅怀先烈演讲稿
2014/09/03 职场文书
同学聚会祝酒词
2015/08/10 职场文书
mysql 8.0.24 安装配置方法图文教程
2021/05/12 MySQL
深入解析Apache Hudi内核文件标记机制
2022/03/31 Servers