ECMAScript中var let const常见问题及区别详解

 更新时间:2023年02月02日 16:25:48   作者:肥晨  
这篇文章主要为大家介绍了ECMAScript中var let const常见问题及区别详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引言

在ECMAScript中,有3个关键字可以用于声明变量。分别是:var、let和const。其中,var在所有ECMAScript都是可以使用的,但是let和const需要在ECMAScript6及其以上版本才可以使用。

let和const的行为基本一致,但是其中有一个比较重要的一个区别,就是const用它声明变量时必须同时初始化变量,且尝试修改const声明的变量会导致运行错误。所以常有人直接理解为const用于声明常量。

一:作用域

var是函数作用域。

let和const是块级作用域。

也就是说var声明的变量出函数时就会被销毁,而let和const声明的变量出块级内部就会被销毁。

下面使用for举例:

for中的变量声明,也是var和let的区别之一。

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

 造成这种现象的原因就是:var可以渗透到循环体外部,在退出循环的时候,迭代变量保存的是导致循环退出的值。而let的是因为作用域反限于for循环块的内部,迭代循环声明一个新的变量,每个setTimeout引用的都是不同的变量实例。

二:优先级

三个关键字之间没有优先级,按照声明顺序。

三:全局声明区别

let和var的不同是,let不会成为window对象的属性。

        var name = "Matt".
        console.log(window.name); //Matt
        let name = "Matt"
        console.log(window.name);//undefined

四:变量提升

这也就是let和var的一个重要的区别,就是let声明的变量不会在作用域中被提升。

        console.log(name); //undefined
        var name = "Matt";
        console.log(name); //ReferenceError: name is not defined
        let name = "Matt"

 在代码解析时,JavaScript引擎也会注意到后面的let(也就是常谈到的“类似提升行为”),只不过在此之前不能操作这个被声明的变量,不然就会送给你漂亮的红色ReferenceError。而这个瞬间也被称之为“暂时性死区”。也算是在某些方面限制了代码的规范度吧。

其他:

1.在ES6中明确规定,在{}中出现let和const,就会被限制在里面(也就是块级作用域)。

2.函数提升优先级大于var的变量提升(还是不要重名比较好,你想想要是你们部门有人和你重名重姓会多麻烦)。

以上就是ECMAScript中var let const常见问题及区别详解的详细内容,更多关于ECMAScript中var let const区别的资料请关注脚本之家其它相关文章!

相关文章

  • 基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式

    基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式

    本文给大家介绍基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式,涉及到javascript语法特征相关知识,对本文感兴趣的朋友快来一起学习吧
    2015-10-10
  • js自定义事件及事件交互原理概述(一)

    js自定义事件及事件交互原理概述(一)

    在JS中事件是JS与浏览器交互的主要途径,本文主要介绍下最简单的自定义事件,不过还有很多缺陷,感兴趣的朋友可以了解下,或许对你学习自定义事件有所帮助
    2013-02-02
  • js自调用匿名函数的三种写法(推荐)

    js自调用匿名函数的三种写法(推荐)

    下面小编就为大家带来一篇js自调用匿名函数的三种写法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • JavaScript循环遍历的24个方法,你都知道吗

    JavaScript循环遍历的24个方法,你都知道吗

    这篇文章主要给大家介绍了关于JavaScript循环遍历的24个方法,文中对每种方法都给出了详细的实例代码,方便大家理解学习,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-09-09
  • javascript动画浅析

    javascript动画浅析

    最近一直在弄手机端的游戏,接触到各种动画。加之对之前的自己那个动画类不满意,就有心想写个新的。然后翻看各种博客,查资料。也学到一些新的东西
    2012-08-08
  • JavaScript Uploadify文件上传实例

    JavaScript Uploadify文件上传实例

    这篇文章主要为大家详细介绍了Uploadify文件上传小实例,一个简单的jsp上传小功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • 详解JS实现简单的时分秒倒计时代码

    详解JS实现简单的时分秒倒计时代码

    这篇文章主要介绍了JS时分秒倒计时的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 让你5分钟掌握9个JavaScript小技巧

    让你5分钟掌握9个JavaScript小技巧

    这篇文章是国外翻译JavaScript小技巧,几个不错的知识点,方便学习js的朋友,感觉内容非常不错特分享一下,需要的朋友可以参考下
    2018-06-06
  • JS实现动态生成表格并提交表格数据向后端

    JS实现动态生成表格并提交表格数据向后端

    这篇文章主要为大家详细介绍了JS实现动态生成表格并提交表格数据向后端的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • javascript if条件判断方法小结

    javascript if条件判断方法小结

    今天在为网站增加一些代码功能的时候,需要用到if条件判断,发现简写方法忘了,这里特整理下
    2014-05-05

最新评论