var, let ,const区别

Posted tonyhao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了var, let ,const区别相关的知识,希望对你有一定的参考价值。

  es6新增了let和const新命令,用于变量的声明,这两个和es5的var存在着差异,而且let和const也有着一些区别,既然他两是es6新增的方法那就有他们的独特之处,让我们来看看一看吧.

  首先我们得先了解var的作用,var声明的变量可以改变,而且需要初始值否则会报undefined,这里存在着变量提升

``js
 var a = 1;
 console.log(a)//a:1
 function outPut()
 var a= 4;
 console.log(a)//a:4 
 
outPut() 
console.log(a)//a:4
``js
console.log(b)//undefined
var b = 1;                                                                                      

  知道了var之后我们来了解下let和const的特性吧,var和let/const比较如下

  1.块级作用域

  2.不存在变量提升

  3.暂时性死区

  当初不是很明白为什么需要块级作用域,往往代码比文字更有说服力

function f1()  
let n = 5;
if (true)
let n = 10;
console.log(n); // 10 内层的n

console.log(n); // 5 当前层的n

  这样就很好的解决了全局变量污染的问题了

  再来个给力的栗子,你就更加明白了var和let的区别了,如下

 // var
    for(var i=0;i<5;i++)
           setTimeout(function()
               console.log("var:" + i);//5,5,5,5,5
          )
    

       // let
    for(let i=0;i<5;i++)
           setTimeout(function()
               console.log("let" + i);//1.2,3,4,5
          )
    

  这样是不是就明白了let和var的区别呢,那在es6之前如何解决这个问题的呢,那我们得使用闭包了

for(var i=0;i<5;i++)
        (function(i)
           setTimeout(function()
               console.log("var" + i);//1,2,3,4,5
          )
        )(i);

  现在我们来了解下暂时性死区和不存在变量提升,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量

var tmp = 123; // 声明
if (true) 
  tmp = ‘abc‘; // 报错 因为本区域有tmp声明变量
  let tmp; // 绑定if这个块级的作用域 不能出现tmp变量

  暂时性死区和不能变量提升的意义在于:

  为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为

  最后我们来聊一聊const吧,

  1.声明时候必须赋值

let p; var p1; // 不报错
const p3 = ‘马上赋值‘
const p3; // 报错 没有赋值

  2.const一旦声明值就不能改变,const所说的一旦声明值就不能改变,实际上指的是:变量指向的那个内存地址所保存的数据不得改动

  这些都是借鉴大佬的文章方便自我学习已经复习的

  

  

 

以上是关于var, let ,const区别的主要内容,如果未能解决你的问题,请参考以下文章

var和let/const的区别

let,const 与 var的区别

var let const 的区别

var,let和const的区别是什么?

var, let ,const区别

大场面经6.30 let,const,var 的区别,const 定义的对象是否可以修改