9.1 概览

ES6 新增了两个定义变量的关键字:letconst,它们几乎取代了 ES5 定义变量的方式:var

9.1.1 let

let 语法上非常类似于 var,但定义的变量是语句块级作用域,只存在于当前的语句块中。var 拥有函数作用域。

在如下的代码中,let 定义的变量 tmp 只存在于行 A 开始的语句块中:

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];
}

9.1.2 const

constlet 类似,但是定义变量时必须初始化值,并且是只读的。

const foo;
    // SyntaxError: missing = in const declaration

const bar = 123;
bar = 456;
    // TypeError: `bar` is read-only

9.1.3 定义变量的方式

下面的表格对比了在 ES6 中定义变量的 6 种方式:

Hoisting Scope Creates global properties
var Declaration Function Yes
let Temporal dead zone Block No
const Temporal dead zone Block No
function Complete Block Yes
class No Block No
import Complete Module-global No

results matching ""

    No results matching ""