ES6系列之变量声明let const

本文介绍了ES6中的let和const关键字,对比了它们与var的区别,强调了块级作用域的概念,并通过实例展示了let如何避免变量提升和作用域冲突问题。同时,还讨论了const的常量特性以及它们在循环和函数中的应用,揭示了ES6对于JavaScript开发的改进和优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ES6也出来好久了,最近闲来无事就想着吧es6做一个系统的总结,巩固自己的知识,丰富一下博客.

为什么叫ES6

  实际上是ECMA的一个打的标准,这个标准是在2015年6月发布的,正式的名字实际是es2015,ecma这个组织规定每年6月份对这个版本进行更新,所以有es2016,es2017,es2018,有的人也称其为es7 es8,当然es6较之前的es5确实做了非常大的更新,对我们开发这也是非常友好

变量的声明

  废话不多扯,进入正题,

//之前的变量声明是js的var声明列如
var a=1

  在es6中推出来let和const这两个声明变量的关键字

  let          相当于之前的var 

  const     常量定义好了不能改变 

  在之前只有全局作用域和函数作用域,但是在es6有了块级作用域,(只要遇见{}都可以当做块)

  因此,let和const的作用域只是当前的块

  举个列子:

  之前没有块级作用域的时候

  

var a=1
function f(){
  if(false){
      var a=2  
}  
console.log(a) } f()

  不管最后的if执行不执行最后都会输出undefined因为存在预解析,函数内的a提升到函数顶部,因此输出的事undefined

但是当用let定义就不会出现这个问题

var a=1
function f(){
  if(false){
      let a=2  
}  
console.log(a)    
}
f()

最后输出的一定是1,

从上边可以看出let没有预解析,不存在变量提升,并且作用域仅仅是当前的块,

再举一个典型的例子

for(var i=0;i<8;i++){
    setTimeout(function(){
       console.log(i)
},1000)
}

一秒后输出8个8,要解决就得用闭包

但是用let定义之后

for(let i=0;i<8;i++){
    setTimeout(function(){
       console.log(i)
},1000)
}

用了let之后1秒后输出1,2,3,4,5,6,7,8

还有一个列子

   var arr =[];
   for(var i=0; i&lt;10; i++){
       arr[i]=function(){
           console.log(i);
       }
   }

   arr[5]();//输出的是10<br />//用let定义之后</pre>
for(let i=0; i<10; i++){
arr[i]=function(){
console.log(i);
}
}

arr[5]();//输出的是5

 还有一个最典型的列子

有三个按钮点击每个按钮弹出按钮的index

    <input type="button" value="aaa">
    <input type="button" value="bbb">
    <input type="button" value="ccc">
//js
let aInput = document.querySelectorAll('input');
//用var定义
for(var=0; i<aInput.length; i++){
aInput[i].οnclick=function(){
alert(i);
}
}
不管点击哪一个输出的永远是3,相信在实际工作中的都知道这是什么回事,之前解决就是用闭包
但是用es6之后用一个小小的let就解决了
for(let i=0; i<aInput.length; i++){
aInput[i].οnclick=function(){
alert(i);
}
}

  

const和let的性质一样 只是const一旦定义不可再更改

比如

const a=1

a=2//Assignment to constant variable.  直接报错

let 和const还有一个特点就是在一个块级作用域内定义的变量不能重列如

let a=1

let a=2   //Identifier 'a' has already been declared

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值