ES6篇——var、let、const区别

es6主要新增了const和let,用来声明变量。但是let和const还是有一些不同的细节。

1.var、let、const的属性区别:

声明

变量提升

作用域

初始值

重复声明

var

函数级

不需要

允许

let

块级

不需要

不允许

const

块级

需要

不允许

 

2.三个声明变量提升:

 console.log(a);//undefined
 console.log(b);//报错
 console.log(c);//报错
 var a='黄三';
 let b='黑小';
 const c='张小';

这三个声明的区别很明显,因此let和const不支持变量提升,一般是要先声明再使用。

3.三个声明作用域:

var str1='科比';
let str2='詹姆斯';
const str3='乔丹';
if(1 + 1 == 2){
   var str1='易建联';
   let str2='姚明';
   const str3='朱芳雨';
   console.log(str1,str2,str3);//易建联,姚明,朱芳雨
}
console.log(str1);//易建联
console.log(str2);//詹姆斯
console.log(str3);//乔丹

只有let和const有效避免变量覆盖,它们都是块级作用域;var新变量覆盖了旧变量,函数作用域。

另外,块级作用域不支持外部直接访问内部。

if(1 + 1 == 2){
       var str1='易建联';
       let str2='姚明';
       const str3='朱芳雨';
       console.log(str1,str2,str3);//易建联,姚明,朱芳雨
}
console.log(str1);//易建联
console.log(str2);//报错,no defined
console.log(str3);//报错,no defined

 3.1 for循环的作用域:

<body>
<!--快捷键:button{按钮$}*5-->
<button>按钮1</button>
<button>按钮2</button>
<button>按钮3</button>
<button>按钮4</button>
<button>按钮5</button>
<script>
    var btns=document.querySelectorAll('button');
        for(var i=0;i<btns.length;i++){
                btns[i].onclick=function () {
                    alert('点击了第'+i+'个');//点击了第5个,5
                }
        }
</script>
</body>

var:每个按钮为5个,点击了每个按钮都是打印“点击了第五个”。这样的话,绝对是不满足开发者的需求。

<body>
<!--快捷键:button{按钮$}*5-->
<button>按钮1</button>
<button>按钮2</button>
<button>按钮3</button>
<button>按钮4</button>
<button>按钮5</button>
<script>
        let btns=document.querySelectorAll('button');
        for(let i=0;i<btns.length;i++){
                btns[i].onclick=function () {
                alert('点击了第'+i+'个');//点击了第0个到第5个,0,1,2,3,4
                }
           }
</script>
</body>

let:可以看到这样的打印,只要每个点击按钮都打印为“点击了N个按钮”,这才是符合预期。

理解:在每一次循环中,let都会重新声明变量,因为let本身都是用块级作用域,所以会记住循环中上一次变量的值,只要是在自己的作用域情况下,循环中每一个值都不会被覆盖掉。

所以推荐在for循环的应用中直接使用let声明。

4.初始值:

只有const声明常量必须赋值。

//err
const name;
name='bbbb';
console.log(name);//报错,因为常量没有赋值

//good
const name='bbbb';
console.log(name);//bbbb

5.三个声明重复声明:

var name1='aaaa';
let name2='bbbb';
const name3='cccc';
name1 ='1111';
name2 ='2222';
name3 ='3333';
console.log(name1);//1111
console.log(name2);//2222
console.log(name3);//报错,不能更改

var和let支持重复声明,只有const不支持重复声明。

另外,const 对于数组和对象的元素可以修改,不算做对常量的修改,这样不会报错。

//数组
const TEAM=['UZI','MXLG','Ming','Xiaohu']
TEAM.push('Meiko');//添加Meiko到数组内
console.log(TEAM);//UZI,MXLG,Ming,Xiaohu,Meiko

//对象
const t={name:'黄小'};
t.name='黑小';
console.log(t);//黑小

为何要学习ES6的let和const?对于JavaScript是个弱类型,很好地提升它的性能,可以减少大多数奇怪的问题。现在大多数都使用let和const声明变量。

以上就是这文章的内容了,不断更新中.....给知识充电中。

欢迎各位大佬评论、点赞和收藏!Thanks

  • 13
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值