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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值