ES6中的let和const详解

大家有可能想let和const有什么可以特意去了解的呢?它们不就是ES6新出的二种变量命名方式,确实如果,但是里面的坑你们还是需要了解的,很多人认为let是可以代替var的,嘿嘿,如果你们这样理解就大错特错了

let

let用来声明变量,并且会在当前作用域形成代码块

所谓代码块其实就是

{
    let a=1
}

{}就是一个代码块.

使用let声明的变量,只能在当前代码块中访问,类似函数作用域。但是有不同的地方
  1. let声明的变量,变量是不会被提升的。这个和var有很大的区别的
function fn1() {
    console.log(a);
    let a = 2;
}
fn1(); // 报错
var b = 2;

function fn2() {
    console.log(b);
    let b = 1;
}
fn2(); // 报错


function fn3() {
    console.log(a)
    var a = 3
}
fn3() //undefined

var 会先将变量声明,但是并不赋值。所以是undefined
2. for循环中使用let定义变量,

let arr = []
for (let i = 0; i < 5; i++) {
    arr.push(function() {
        console.log(i)
    })
}
arr[0]()//0
arr[1]()//1
arr[2]()//2

let arr = []
for (var i = 0; i < 5; i++) {
    arr.push(function() {
        console.log(i)
    })
}
arr[0]()//5
arr[1]()//5
arr[2]()//5

而使用使用let/const关键字声明变量的for循环,除了会创建块级作用域,let/const还会将它绑定到每个循环中,确保对上个循环结束时候的值进行重新赋值
什么意思呢?简而言之就是每次循环都会声明一次(对比var声明的for循环只会声明一次),可以这么理解let/const中的for循环

const

const除了不能改变物理指针的特性,其他特性和let一样

当声明简单的数据类型,声明以后就不能改变

const a = 111
a = 2 //Assignment to constant variable.

当声明复杂数据类型的时候,物理指针不可改变,但是可以改变数据内的属性值,以及可以给数据添加新属性等操作

const obj = {
    a: 2
}
obj.a = 3
obj.b = 1
console.log(obj) //{ a: 3, b: 1 }
obj = {} //Assignment to constant variable.
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值