文档章节

let和const命令

Allen-Liu
 Allen-Liu
发布于 2017/07/20 23:31
字数 478
阅读 2
收藏 0

let命令是ES2015中的用于变量声明的新命令,用法类似于var。const命令是ES2015中的用于常量声明的新命令,一旦声明,常量的值就不能改变。

let的特性

  • 块级作用域
  • 不存在变量提升
  • 暂时性死区
  • 不允许重复声明

块级作用域

外层作用域无法读取内层作用域的变量,内层作用域可以定义外层作用域同名的变量。

不存在变量提升

在ES5和之前的规范中,JavaScript存在变量提升的情况,即变量可以在声明之前使用,在ES2015中,这种情况就被杜绝了。

// ES5及之前的情况
console.log(a); // 输出undefined
var a = 4;

// ES2015的情况
console.log(a); // 输出ReferenceError
let a = 4;

暂时性死区

如果在该块的外层作用域中存在一个变量声明,该变量在本块中也再次声明,如果该变量在本块的声明前使用,则会报错。(块级作用域和不存在变量提升导致暂时性死区)

let a = 3;
{
  console.log(a); // 输出ReferenceError
  let a = 4;
}

不允许重复声明

let不允许在相同的作用域内,重复声明同一个变量。

const命令

const声明一个只读的常量,一旦声明,常量的值就不能改变。

  • 块级作用域
  • 不存在变量提升
  • 暂时性死区
  • 不允许重复声明

const实际上保证的,并不是变量的 值不得改动,而是变量指向的那个内存地址不得改动。对于复合类型的数据,其数据结构是可变的。

const foo = {};

foo.prop = 123; // 成功

foo = {}; // 失败

const a =[];

a.push('Hello'); // 成功

a = ['World']; // 失败

如果想将对象冻结,可以使用Object.freeze方法:

const foo = Object.freeze({});

foo.prop = 123; // 严格模式下会报错,非严格模式下不起作用

© 著作权归作者所有

上一篇: 字符串的扩展
下一篇: NodeJS模块
Allen-Liu
粉丝 1
博文 14
码字总数 4744
作品 0
成都
程序员
私信 提问

暂无文章

Oracle SQL语法实例合集

如需转载请注明出处https://my.oschina.net/feistel/blog/3052024 目的:迅速激活Oracle SQL 参考:《Oracle从入门到精通》 ------------------------------------------------------------......

LoSingSang
今天
2
0
增加 PostgreSQL 服务进程的最大打开文件数

https://serverfault.com/questions/628610/increasing-nproc-for-processes-launched-by-systemd-on-centos-7 要在systemd的配置里加才行...

helloclia
今天
2
0
组合模式在商品分类列表中的应用

在所有的树形结构中最适合的设计模式就是组合模式,我们看看常用商品分类中如何使用。 先定义一个树形结构的商品接口 public interface TreeProduct { List<TreeProduct> allProducts(...

算法之名
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部