码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • ES6 | let、const以及与var之间的区别


    目录

    一、let

    1.声明变量

    2.块儿级作用域

     3.不存在变量提升

     4.不影响作用域链

    二、const

    1.声明常量

     2.一般常量使用大写(潜规则)

    3.常量的值不能修改

     4.块儿级作用域(const和let一样,都是块儿级作用域)

    5.对于数组和对象的元素修改,不算做对常量的修改,不会报错

    6.var的变量是顶级变量,而let和const不是 

    三、let、const和var之间的区别


    一、let

    1.声明变量

    可以直接声明变量(let a),可以同时声明多个变量(let b,c,d),也可以直接赋值(let e=100),当然,也可以在同时声明多个变量的同时进行赋值(let f=521,g='i love you',h=[]),但是有一个需要注意的点,就是变量不能重复声明,如果重复声明的话会报错。

    2.块儿级作用域

    变量只在代码块以内有效,出了代码块就没有效了。举个栗子!

     

     3.不存在变量提升

    变量不能在变量未声明之前使用,它不像var有变量提升,var在未声明之前使用的话会显示undefined。

     4.不影响作用域链

    虽然school是块儿级作用域,但是在函数内部找不到school这个变量,它还是会向上级作用域查找。 

    我们来写一个小案例,之间我们也有写过:

     代码:

    1. <div>
    2. <h3>点击切换背景颜色: h3>
    3. <div class="item">div>
    4. <div class="item">div>
    5. <div class="item">div>
    6. div>
    7. <script>
    8. var items = document.querySelectorAll('.item')
    9. for(var i=0; ilength; i++){
    10. items[i].onclick = function(){
    11. this.style.background = 'skyblue'
    12. }
    13. }
    14. script>
    15. body>

    我们之间呢,是在点击事件中用了this来指定元素来改变背景颜色,一开始我们肯定犯了一个错误,就是我们用【items[i].style.background = 'skyblue'】却没有任何用,这是为什么呢?

    其实这个变量i是一个全局变量,如果我没有记错的话,for循环和点击事件是一个异步任务,当我们点击时,此时的变量i已经跳出循环变成3了。当点击时,发现没有变量i,然后去上一级查找,找到window.i,此时window.i = 3,那它当然会没有反应啊!!!

    所以想改变这个,一是把【items[i].style.background = 'skyblue'】改成【this.style.background = 'skyblue'】;二是把【var i = 0】改成【let i = 0】,有了块级作用域,也就不会报错。

    二、const

    1.声明常量

    const和let不同,let声明常量时,可以不赋于初始值,但是如果const没有赋于初始值时,不然会报错。

    1. //1.声明变量
    2. const A;
    3. //2.const必须赋于初始值
    4. const B = 'am B'
    5. console.log(B)

     2.一般常量使用大写(潜规则)

    3.常量的值不能修改

    1. const B = 'am B';
    2. B = 'am not B'
    3. console.log(B)

     4.块儿级作用域(const和let一样,都是块儿级作用域)

    5.对于数组和对象的元素修改,不算做对常量的修改,不会报错

    1. const TEAM = ['UZI','MXLG','MING','Letme'];
    2. TEAM.push('Meiko')
    3. console.log(TEAM)

    6.var的变量是顶级变量,而let和const不是 

    三、let、const和var之间的区别

    • var,没有块级作用域,创建和初始化的时候有变量提升,可以重复声明
    • let,块级作用域,不允重复声明,暂时性死区
    • const,块级作用域,不允许重复声明,暂时性死区,const声明的变量不能直接修改值,但是const定义的是指向这个对象的地址,地址不变,引用的数据可以改变

     暂时性死区:创建了变量但是没有初始化,没法使用变量,只在变量创建阶段有变量提升,在初始化阶段没有提升,形成了暂时性死区

  • 相关阅读:
    np.argsort()函数
    Java面试+笔试题大集合
    【无线传感器网络】2 STM32编程实验
    怎么将ruoyi源代码与新业务代码分开写
    【ArcGIS微课1000例】0054:尺寸注记的创建与编辑
    【平面设计作品】以设计触碰心灵,当教育变得遥不可及……
    正则系列之字符类
    推荐一份适合所有人做的副业,尤其是程序员!
    Jupyter Lab 启用在线实时协同功能 实现协作编程
    List与数组之间的相互转换
  • 原文地址:https://blog.csdn.net/m0_72383454/article/details/126700608
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号