ES6的let和const

let

  • let和var很相似,用于声明一个变量。但是let声明的变量只存在块状作用域内。
function order(x, y) {
    if (x > y) { // (A)
        let tmp = x;
        x = y;
        y = tmp;
    }
    console.log(tmp===x); // ReferenceError: tmp is not defined
    return [x, y];
}
  • 使用大括号代替立即执行函数{ let a = 123; } console.log(a); // ReferenceError: a is not defined

const

  • const则是用来声明某个变量等于它初始化的值,并且不能再改变。同样,const也是只存在块状作用域内的
const foo;  // SyntaxError: Missing initializer in const declaration

const bar = 123;
bar = 456; // TypeError: `bar` is read-only
  • 注意和Object.freeze的区别。PS:经庄希琦提醒,这里可以借用指针的概念,obj指向了obj的指针,此指针不可变,但是对象内部的值还是可以改变的。
const obj = {a: 123};
obj.a = 234;
console.log(obj.a); // 234

const obj2 = Object.freeze({a:123});
obj.a = 234; // 这里应该要报错的,但是chrome现在没有报错
console.log(obj.a); // 123

Temporal Dead Zone (TDZ)

由let和const声明的变量都会有自己的TDZ。当进入这个变量的作用域的时候,这个变量是不能被访问的,直到这个变量被初始化。我们来看下面一段代码

let tmp = true;
if (true) { // enter new scope, TDZ starts
    // Uninitialized binding for `tmp` is created
    console.log(tmp); // ReferenceError

    let tmp; // TDZ ends, `tmp` is initialized with `undefined`
    console.log(tmp); // undefined

    tmp = 123;
    console.log(tmp); // 123
}
console.log(tmp); // true

TDZ的原因可以简单地理解为,let和const不存在变量提升

并且要注意,这段代码经过babel编译,结果会是:undefined, undefined, 123, true,不会报错,因为babel是使用var去最大限度模拟let

何时使用let和const

  1. 尽可能使用const
  2. 当变量需要改变的时候,把const改为let

参考资料

Exploring ES6

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏chenssy

【死磕Java并发】—–Java内存模型之从JMM角度分析DCL

DCL,即Double Check Lock,中卫双重检查锁定。其实DCL很多人在单例模式中用过,LZ面试人的时候也要他们写过,但是有很多人都会写错。他们为什么...

39011
来自专栏Java成长之路

单例模式

所谓饿汉式单例设计模式,就是将类的静态实例作为该类的一个成员变量,也就是说在JVM 加载它的时候就已经创建了该类的实例,因此它不会存在多线程的安全问题。

673
来自专栏用户画像

JAVA单例模式

在整个应用中,保证一个类只有一个实例,它提供了一个可以访问到它自己的全局访问点(静态方法)。

672
来自专栏编码前线

设计模式之单例模式

单例模式指的是在应用整个生命周期内只能存在一个实例。单例模式是一种被广泛使用的设计模式。他有很多好处,能够避免实例对象的重复创建,减少创建实例的系统开销,节省内...

983
来自专栏我就是马云飞

设计模式二十四章经之单例设计模式

1013
来自专栏java工会

java设计模式-单例模式

1676
来自专栏noteless

单例模式 创建型 设计模式(六)

可以借助于全局变量,但是类就在那里,你不能防止实例化多个对象,可能一不小心谁就创建了一个对象

801
来自专栏Android先生

Android常用设计模式——单例模式

单例对象必须确保只有一个实例存在,一个类有且只有一个实例,而且自行实例化并向整个系统提供这个实例。

703
来自专栏小樱的经验随笔

【Java学习笔记之三十】详解Java单例(Singleton)模式

概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。   单例模式有以下特点: 1...

2615
来自专栏java一日一条

面试中单例模式有几种写法

纠结单例模式有几种写法有用吗?有点用,面试中经常选择其中一种或几种写法作为话头,考查设计模式和coding style的同时,还很容易扩展到其他问题。这里讲解几...

826

扫码关注云+社区