JavaScript中var与let的区别是什么

技术JavaScript中var与let的区别是什么本篇文章给大家分享的是有关JavaScript中var与let的区别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小

这篇文章是要和大家分享在JavaScript中var和let的区别是什么。边肖觉得挺实用的,分享给你学习。希望你看完这篇文章能有所收获。让我们和边肖一起看看。

前言:

Var是JavaScript第一次出现时就存在的变量声明关键字,而let是只出现在ES6中的变量声明关键字。毫无疑问,它们之间有很大的区别。那么具体有哪些区别呢?

00-1010VAR是功能范围,let是块级范围。

{

Varmonkey=’熏悟空’;

Letpig=’猪排盖’;

}

console . log(monkey);//输出未定义

console . log(pig);//错误:从上面的代码可以看出pigisnotdeined。由let声明的变量只在它们所在的代码块中有效,在代码块之外无效且不可访问,而由var声明的变量在代码块所在的函数范围内有效。

00-1010VAR声明的变量会被提升,但是let声明的变量不会被提升。

console . log(monkey);//未定义

Varmonkey=’熏悟空’;

console . log(pig);//错误:pigisnotdefined

Letpig=’猪排盖’;同样的逻辑,为什么var声明的变量在声明前被调用时会显示undefined,而let声明的变量在声明前被调用时会抛出异常?这就是他们在变量提升上的区别。var声明的变量有变量提升,let声明的变量没有变量提升。

那么什么叫变量提升呢,我这里不做概念性的描述,我只说我个人的理解,就是以上代码实际上相当于如下:

varmonkey

console . log(monkey);//未定义

猴子=‘熏悟空’;

console . log(pig);//错误:pigisnotdefined

Letpig=’猪排盖’;看到区别了吗?var声明的变量会将声明的变量提取到定义范围的顶部而不赋值,赋值操作还在你的代码中,所以调用var声明的变量时,是一个已经声明但没有定义值的变量,所以调用结果是未定义的,称为变量提升。对于let定义的变量,没有这样的变量提升。

00-1010临时死区:如果让一个变量在某个范围内,如果外部范围内有同名的变量,即使在范围内改变,也不会影响外部范围。

具体表现如下:

for(vari=0;i5;I){ 0

setTimeout(函数(){ 0

console.log(i)

},1000)

}

for(leti=0;i5;I){ 0

setTimeout(函数(){ 0

console.log(i)

},1000)

}请问这两处代码的运行结果分别是什么?

第一次运行代码的结果是在1s后按顺序打印五个5s;第二个代码的结果是在1s后按顺序打印0,1,2,3,4。

请问为什么会存在这种区别?

因为第一个代码的变量I是用var关键字声明的,所以不存在临界死区,也就是你在1s后的setTimeout中访问的变量I就是for循环在全局上下文中运行后的那个,所以打印出来的结果都是5;

另一方面,第二个代码的变量I由let关键字声明,导致了一个临界死区。setTimeout中的变量I是您当时存储它时I的值。此存储间隔中的I不会改变,因为外部有相同的变量I,并且为其分配了不同的值。它仍然是以前存储的值。这是临时死区的表现,也是第二次代码运行后依次打印0,1,2,3,4的原因。

1.作用域表现形式不同

letmonkey==’熏悟空’;

Letmonkey=’逼马亲’;//错误:已声明标识符“a”

Varpig=’猪排盖’;

Varpig=’猪肛裂’;//正常访问,变量pig的值被替换。以上就是JavaScript中var和let的区别。边肖认为,一些知识点可能会在我们的日常工作中看到或使用。我希望你能通过这篇文章学到更多的知识。更多详情请关注行业信息渠道。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/137938.html

(0)

相关推荐

  • 周记一个星期发生的事,周记是写一周发生的事情吗

    技术周记一个星期发生的事,周记是写一周发生的事情吗这一周我过得非常开心周记一个星期发生的事,因为我干了许许多多有趣的事情,还学了很多新知识,掌握了很多新本领。星期三晚上,我们在风雨球场看了一场精彩的英语歌曲大赛。小学部的

    生活 2021年10月24日
  • 怎么理解ADO.NET数据表

    技术怎么理解ADO.NET数据表这篇文章主要讲解了“怎么理解ADO.NET数据表”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解ADO.NET数据表”吧!ADO.N

    攻略 2021年12月3日
  • 将怎么组词,将组词,用将字怎么组词

    技术将怎么组词,将组词,用将字怎么组词将字怎么组词 即将将怎么组词、裨将、小将、将指、宿将、将就、武将、上将、健将、将近、激将、 将胸比肚、 备位将相、 出将入相、 将勇兵雄、 将伯之助、 日就月将、 将(jiāng)

    生活 2021年10月29日
  • sketchformac矢量绘图设计软件(sketchformac矢量绘图软件)

    技术Sketch for mac矢量绘图设计软件怎么用这篇文章将为大家详细讲解有关Sketch for mac矢量绘图设计软件怎么用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定

    攻略 2021年12月24日
  • 胆战心惊什么意思,胆战心惊中的战字是什么意思

    技术胆战心惊什么意思,胆战心惊中的战字是什么意思宠辱不惊 宠:宠爱。受宠受辱都不在呼。指不因个人得失而动心。宠辱若惊 无论受宠胆战心惊什么意思、受辱,心里都要振动。形容人非常计较得失。怵目惊心 看见某种严重情况,心里感到

    生活 2021年10月19日
  • Python、Node.js和Java语言处理的开源工具有哪些

    技术Python、Node.js和Java语言处理的开源工具有哪些这篇文章主要介绍“Python、Node.js和Java语言处理的开源工具有哪些”,在日常操作中,相信很多人在Python、Node.js和Java语言处

    攻略 2021年11月4日