首页>>前端>>JavaScript->JavaScript中var、let和const的区别

JavaScript中var、let和const的区别

时间:2023-11-30 本站 点击:0

JavaScript常用的变量声明有方式 var、let 和 const,那它们之间到底有什么区别呢?什么是提升?什么又是暂时性死区?

1、var

对于这个问题,先来了解一下提升(hoisting)这个概念

console.log(age);//undefinedvarage=18;

从上述代码中可以发现,虽然变量还没有被声明,但是却可以使用到这个未被声明的变量,这种情况就叫提升,而且提升的是声明。

将代码这样来看,就一目了然了

varageconsole.log(age);//undefinedage=18;

再来看一个例子:

varage=18;varage;console.log(age);//->?

如果还认为打印的是 undefined 那么就错了,真正打印的是 18,对于这种情况可以这样来看

varage;varage;age=18;console.log(age);

现在可以得出结论,var声明的变量会发生提升的情况,俗称变量声明的提升,不仅仅变量会提升,函数也会被提升。

console.log(fun);//ƒfun(){}functionfun(){};varfun=1;

对于上述代码,打印结果会是 ƒ fun() {},即使变量声明在函数之后,这也说明了函数会被提升,并且优先与变量提升。

因此,还可以从中知道使用 var 声明的变量会被提升到作用域的顶部。

2、let 和 const

关于 let 和 const,再来看一个例子:

vara=1;letb=1;constc=1;console.log(window.b)//undefinedconsole.log(window.c)//undefinedfunctiontest(){console.log(a);leta;};test();

首先在全局作用域下使用 let 和 const 声明变量,变量并不会被挂载到 window 上(var声明的变量会),这是和 var 声明的区别之一。

接下来当在声明 a 之前如果使用了 a ,就会出现报错的情况

关于这个报错情况,首先报错的原因是因为存在暂时性死区,所以不能在声明前就使用变量,这也是 let 和 const 优于 var 的一点。虽然变量编译的环节中别告知在这块作用域中可以访问,但是访问是首先的。

思考:为什么会存在提升的这个事情呢?

其实根本原因提升是为了解决函数之间互相调用的情况

functionfun1(){fun2();};functionfun2(){fun1();};fun1();

如果没有提升,那么就实现不了上诉代码,因为没有提升就不存在fun1在fun2前面,然后fun2在fun1前面。

3、总结

var 存在提升,可以在声明之前使用变量。let 和 const 因为存在暂时性死区,所以不能在声明之前使用

var 在全局作用域下声明变量会导致变挂载在 window 上,而let 和 const 就不会

函数的提升优先于变量的提升,函数提升会把整个函数挪到作用域顶部,变量提升只会把声明挪到作用域顶部

let 和 const 作用基本一致,不同的是 cosnt 声明的变量不能再次赋值

---END---


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/JavaScript/3923.html