ES6学习(var,let,const区别)

本人写这个专题的博客是为了总结一下自己学习,使用还有刷题时学到的ES6知识点,并做以归纳。

var,let,const

三个属性都可以声明变量。

作用域

var  重新赋值,重新定义变量,可以重复声明,但是后者的值会覆盖前者的值。

作用域:function(如果在全局中,作用域为windows)。var声明的变量会暴露在全局。

let         作用域:block,块级作用域,即 {} 内。

声明的变量只在其block中显示,不暴露在全局。不能重复声明变量。

const      与let一样,作用域都是block,而且不暴露在全局。与let一样不能重新赋值。但是引用的类型值可以更新,即可以在对象中进行更改:

使用Object.freeze()方法可以强制不允许更改:

立即执行函数,私有化变量

window变量举例:

这样会直接更改window中的name属性。使用立即执行函数:

然而这样不会有利于代码的可读性,而且这样也没有什么意义。于是采用let和const的 块级作用域这一特点实现:

{}中,即表示块级作用域

复习一下之前学习闭包时的一个题。for循环

for(var i=0;i<10;i++){
    console.log(i);
}

输出自然是0~10之内的数字。然而在for循环中如果有其他的操作:

for(var i=0;i<10;i++){
    console.log(i);
    setTimeout(function(){
    console.log(`i:${i}`)
},1000)
}

第一个输出就是0~10,然而第二个输出:i : 10。在之前的闭包中有写过这个问题:Mr.J--闭包学习

对于上面的问题,如果想输出对应输出的索引值,只需要将 var 更改 let 即可。(最近在Code wars中刷题已经逐渐减少了var的使用频率而改用let关键字)

变量提升

var    具有变量提升,(Mr.J -- 变量提升)而对于let和const中不能进行变量提升。

对于这个问题的解决:

  • 默认使用const
  • 当变量进行重新绑定或者重新更新使用let
  • 尽量不在ES6中使用var
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值