ECMAScript6 新特征——“let和const敕令”

1 let

基础用法

所声明的变量,只在let敕令地点的代码块内有效。

{
    let b = 100;
    console.log(b); //100
}
    console.log(b); //Error

在for循环中合适运用let

不存在变量提拔

let不像var那样会发作“变量提拔”征象

{
    console.log(a); //undefined
    var a = 10;
    console.log(b); //b is not defined
    let b = 100;
}

暂时性死区

只需块级作用域内存在let敕令,它所声明的变量就“绑定”(binding)这个地区,不再受外部的影响。

var a = 100;
{
    a = 10; //这里的a是let定义的a,而不是var定义的a,由于没有变量提拔,所以报错
    let a;
}

不允许反复声明

let不允许在雷同作用域内,反复声明同一个变量。

{
    let a;
    let a; //Identifier 'a' has already been declared
}

2 块级作用域

let实际上为JavaScript新增了块级作用域。

let a = 100;
{
    let a = 10;
    console.log(a); //10
}
console.log(a); //100

3 const敕令

基础用法

const也用来声明常量,一旦声明不可转变

const a = 100;
a = 10; //Assignment to constant variable.

只声明不赋值也会报错

const a; //Missing initializer in const declaration

也存在块级作用域

{
    const a = 10;
    console.log(a); //10
}
console.log(a); //a is not defined

一样存在暂时性死区

{
    console.log(a); //a is not defined
    const a = 10;
}

也不可反复声明

{
    const a = 10;
    const a = 100; //Identifier 'a' has already been declared
}

指向复合范例变量地点稳定,但对象自身可变

{
    const a = {};
    a.name = "Oliver";
    console.log(a.name); //Oliver
    a = {}; //Assignment to constant variable.
}

Object.freeze凝结对象

{
    const a = Object.freeze({});
    console.log(a); //Object {}
    a.name = "Oliver"; //不起作用
    console.log(a); //Object {}
}

4 全局对象的属性

let、const和class敕令声明的全局变量不属于全局对象的属性

let a = 10;
console.log(a); //10
console.log(window.a); //undefined
    原文作者:JS菌
    原文地址: https://segmentfault.com/a/1190000004712590
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞