ES6 var let const 的区别

ES6 var let const 的区别

 

var

1. 只支持全局作用域和函数作用域
{
  var m = 2
}
console.log(m)//输出为2
2. 不支持块级作用域
3. 会自动提升声明
console.log(m)//输出undefined
var m = 2

 此处不会报错,因为用var声明的变量会提升声明(只提升声明)到整个作用域的开头。相当于以下代码:

var m
console.log(m)//输出undefined
m = 2
4. 可重复声明变量
var m = 2
var m = 5

 此处不会报错。var允许重复声明变量,但它的含义是重新开辟内存空间再赋值,而并非覆盖原有的变量值

let

1.还支持块级作用域
{
    let m = 2
}
console.log(m)//报错

 此处报错的原因是let具有块级作用域(即一对{ }之间)

2.不提升声明
{
    console.log(m)//报错
    let m = 5
}

 let声明的变量智能先声明后使用

3.不可重复声明
{
    let m = 2
    let m = 3
    console.log(m)//报错
}

4.TDZ( 暂时性死区 )

只要块级作用域内存在 let 命令,它所声明的变量就“绑定”( binding )这个区域,不再受外部的影响。
 ES6 明确规定,如果区块中存在 let命令,则这个区块对这些命令声明的变量
开始就形成封闭作用域。只要在声明之前就使用这些变量 就会报错。

var tmp = 123;
{
    tmp = 'abc '; //ReferenceError
    let tmp ;
}

const

1.还支持块级作用域 (同 let )
2.不提升声明 (同 let )
3.不可重复声明 (同 let )
4.TDZ (同 let )
5.声明常量
{
    const a = 2
    a = 3//TypeError: Assignment to constant variable.
}

const声明一个只读的常量,其余与let用法一致。
 当常量保存的不是原始值而是一个地址引用时,对象的属性可改变,但不能更改它的引用

{
    const obj = {
        name:'Ann',
        age:18
    }
    obj.age = 20//不会报错
    console.log(obj.age)//输出20
    obj = {x:0,y:0}//TypeError: Assignment to constant variable.
}

举个例子
============================举个栗子

1.

{
    var count = 10
    let count = 20
    console.log(count)//报错**SyntaxError: Identifier 'count' has already been declared
}

2.

{
    var count = 10
    if(count>0){
        let count = 40
    }
    console.log(count)//10
}

3.

{
    var a = [];
    for (var i = 0; i < 10; i++) {
        a[i] = function () {
            console.log(i)
        }
    }
    a[6]();//10
}

let---->块作用域,函数本身有闭包的行为,会将该变量的作用域保存

{
    var a = [];
    for (let i = 0; i < 10; i++) {
        a[i] = function () {
            console.log(i)
        }
    }
    a[6]();//6
}

for形成外层作用域,循环内部为子作用域。两层作用域,使用就近的变量

{
    for (let i = 0; i < 3; i++) {
        let i = 'abc'
        console.log(i)//输出三次 abc
    }
}

=========================首次创作,非常激动·····(ˊᵒ̴̶̷̤ ꇴ ᵒ̴̶̷̤ˋ)~

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值