ES6(1)、var、let和const区别

作者: 飞天小猪_pig | 来源:发表于2022-04-09 23:48 被阅读0次
1、背景:

在ES6之前声明一个变量都是用var进行声明,但是由于var声明变量具有变量提升作用,无论是在代码后面声明还是前面声明,又或者声明一个块级作用域中的变量,都会将变量提升,导致容易变成全局变量。

1、执行在后
var a=1   //全局变量,声明和赋值一起
console.log(a)

//打印出1

2、执行在前
console.log(a)
var a=1   
//var a 能进行变量提升,将a先声明,运行console.log(a),之后才赋值,所以打印出是undefined

如果想变量只作用在块级作用域,ES6之前使用var都会进行变量提升,因此需要结合使用立即执行函数才能实现方法,相当麻烦。

{
   var a=1  //因为变量提升,被提升到作用域外面,无法实现
}

如果使用函数进行包裹,虽然对变量a进行实现块级作用域,但是对于函数x来说又是一个全局变量,多次一举。

function x(){
  var a=1
  window.jack=function(){
     console.log(a)
  }
}

最后只能结合立即执行函数来实现。

( function x(){
  var a=1
  window.jack=function(){
     console.log(a)
  }
 }())

总结:你看看想要实现一个变量只在块级作用域中,需要那么麻烦,因此ES6诞生了let和const。

2、let的使用
{
   let a=1   
   console.log(a)   //打印出1
}
//就那么简单实现块级作用域变量,只在这个范围有用

(1)、超过块级作用域使用,报错,无效

{
   let a=1   
}
 console.log(a)
//报错:a is not defined

(2)、未声明先使用,报错

 console.log(a)
 let a=1
//报错:a is not defined
3、const的使用

和let使用基本差不多,唯一区别是const只有一次赋值机会,而且必须在声明的时候立马赋值

{
   const a=1   
}

最后总结一下:var、let、const区别
(1)、var是ES5语法,let是ES6语法
(2)、var定义变量是函数作用越(全局变量),let定义变量是块级作用域
(3)、var有变量提升,let没有变量提升
(4)、var可以重复声明,let不能重复声明
(5)、let可以重新赋值,const不能重复赋值

4、经典题目:
(1)

var a=1
function fn(){
  console.log (a)
}
a=2    
fn()   

 //打印出来是2

修改成下面

var a=1
function fn(){
  console.log (a)
}   
fn()   
a=2 

 //打印出来是1

这里主要是涉及一个执行顺序问题,所以打印出什么要看代码执行顺序是怎么样的

(2)

<button id='x'>aa</button>
<script>
  // 0、1、2、3、4、5,退出循环是6
  for(var i=0;i<6;i++){
      function fn(){
        console.log(i)    //打印出i=6
      }
      x.onclick=fn
   }
</script>

你会疑惑为啥打印不是0、1、2、3、4、5,这里涉及到代码执行时间问题,当我们想执行代码时候i早就变成了6。

<button id='x'>aa</button>
<script>
  for(let i=0;i<6;i++){    //用let情况
      //i0 i1 i2 i3 i4 i5
      //块里面的i=圆括号里面的i值
      function fn(){
        console.log(i)    //打印出i=5
      }
      x.onclick=fn
   }
</script>

这里看出使用var打印出是6,使用let打印出是5,这是因为一个是全局变量,一个是块级作用域。

相关文章

  • 总结一下前端常见javascript基础面试题:

    1.var ,let 和const的区别: let和const是es6新增的语法, let和var都可以定义变量,...

  • es6总结一

    es6基础 let和const命令 let和const用于声明变量let跟var的区别 1、let定义过的变量不能...

  • (JS)

    ES6 let、const和var的区别 let和const声明变量不存在变量提升 let和const不能重复声明...

  • react 入门基础(一)之ES6

    ####ES6 let const var 三者的区别 ### 1. let const 不能重复声明变...

  • javascript碎片知识000

    const let var 3者的区别。 const 和 let 为es6新增的定义变量的关键字。 var存在...

  • js常见知识点--第二篇

    一、var 、let 、const的区别 var是ES5提出的,let和const是ES6提出的。var不存在块级...

  • es6

    1、let 和const(定义变量) (1)var 、let 、const的区别 a、作用域区别var 变量声明会...

  • let 和 const

    let 和const是es6新增的命令,用于声明变量 var和let/const的区别1.块级作用域2.不存在变量...

  • const let var区别以及使用

    const let var区别如下: 1)var 声明的范围是函数作用域,let 和 const 声明的范围是块作...

  • ES6 学习笔记

    ES6 var let const 的使用 var let const 声明变量 全局作用域 和 块级作用域的区...

网友评论

    本文标题:ES6(1)、var、let和const区别

    本文链接:https://www.haomeiwen.com/subject/eccmsrtx.html