使用Let声明变量

ES6不仅引入了let关键字用于解决变量声明的问题,同时引入了块级作用域的概念。

块级作用域:

代码执行时遇到花括号{会创建一个块级作用域、花括号}结束,销毁块级作用域。

let a = 123;//全局作用域定义{let a = 456;//然后定义块级作用域console.log(a)//使用的时块级作用域中的a}console.log(a)//使用的全局作用域中的a
有了块级作用域之后它的使用范围跟函数一样被限制在了里面
这样更符合常规语言的逻辑,几乎所有的语言都是这样的,但是因为JS以前有变量提升导致了以前很混乱
现在有了```let```之后有效的改善了这样的局面

全局变量挂载到全局对象:全局对象污染问题


let a = 123;
console.log(a)
//输出undefined

而用var声明赋值的话则会挂载到全局
仅仅是这么一个改动我们都无法拒绝使用Let

允许重复的变量声明:导致数据被覆盖的问题

let声明变量不允许当前作用域范围内重复声明

变量提升?:怪异数据访问闭包问题

  • 使用let不会有变量提升,因此不能再定义let之前使用它
  • 底层实现上,let声明的变量实际上也会有提升,但是,提升后会将其放入“暂时性死区”,如果访问的变量位于暂时性死区,则会报错Cannot access 'a' before initialization
  • 当代码运行到该变量的声明语句时,会将其从暂时性死区中移除

在循环中let会做特殊处理

  • 在循环中用let声明的循环变量,会特殊处理,每次进入循环体,都会开启一个新的作用域,并且将循环变量绑定到该作用域(每次循环使用的是一个全新的循环变量)
  • 再循环中 使用let声明循环变量,再循环结束后会被销毁
//这时我绑定了10个按钮让咋们在点击时输出对应的i
for (let i = 1; i < 10; i ++) {btn.function () {console.log(i)//使用的时当前作用域的i}
}
  • 使用let时就不会像var一样在同一个作用域下修改的同一个i了
    具体见我写过的JS用var声明变量的不足,里面有详细提到输出时会有什么问题
  • 在此时let会创建10个作用域看起来用的是同一个i但实际上使用的是不同的i

ES6Let简介 使用Let声明变量好处相关推荐

  1. ES6/06/ES6简介,ES6新增语法,let声明变量,const声明常量,var,let和const总结,数组解构,对象解构,箭头函数,剩余参数

    ES6简介 ES全称:ECMAScript ; 由ECMA国际化组织制定的标准脚本语言的标准化规范: 为什么使用ES6? 每一次标准的诞生都意味着语言的完善,功能的加强,JavaScript语言本身也 ...

  2. python中声明变量 var_声明变量的方法 var、let、const

    简介 "变量提升"意味着变量和函数的声明会在物理层面移动到代码的最前面,但这么说并不准确. 实际上变量和函数声明在代码里的位置是不会动的,而是在编译阶段被放入内存中. 声明变量的方 ...

  3. 为什么let在php中报错,ES6系列之声明变量let与const

    本篇文章主要是向大家分享了关于ES6系列的声明变量let与const,有兴趣的朋友们可以参考一下本文中的内容 简介 概念 ES6 的第一个版本,在 2015 年 6 月发布了,正式名称就是<EC ...

  4. 在循环之前或循环中声明变量之间的区别?

    本文翻译自:Difference between declaring variables before or in loop? I have always wondered if, in genera ...

  5. 使用var、let、const声明变量

    一.使用var声明变量 1.使用方法 通过var关键字可以一次声明一个变量或者多个变量,同时可以为声明的变量赋初始值.但是变量的声明和初始值并不是在同一时间执行的,在执行初始值之前这些声明的变量的值为 ...

  6. 2021年大数据常用语言Scala(四):基础语法学习 声明变量

    目录 声明变量 语法格式 在解释器中定义一个变量 val和var变量 使用类型推断来定义变量 惰性赋值 声明变量 我们将来每一天编写scala程序都会定义变量.那scala语言如何定义变量呢? 语法格 ...

  7. switch语句中在case块里声明变量会遇到提示“Expected expression before...的问题

    switch语句中在case块里声明变量会遇到提示"Expected expression before..."的问题 例如在如下代码中 1 case constant: 2 in ...

  8. oracle存储过程、声明变量、for循环|转|

    oracle存储过程.声明变量.for循环 1.创建存储过程 create or replace procedure test(var_name_1 in type,var_name_2 out ty ...

  9. 如何在MySQL中声明变量?

    本文翻译自:How to declare a variable in MySQL? How to declare a variable in mysql, so that my second quer ...

最新文章

  1. DELL R740XD 开启 TPM功能
  2. python opencv 打开图像时报错 (-215:Assertion failed) size.width0 size.height0 in function 'cv::imshow'
  3. PHPExcel设置自动列宽
  4. leetcode 781. Rabbits in Forest | 781. 森林中的兔子(Java)
  5. Element UI的Table用法
  6. 如何把文件压缩变成一张图片?
  7. Linux tee的花式用法和pee
  8. 数据安全治理的几个基本问题
  9. 回调函数 相当于线程_C++屌屌的观察者模式-同步回调和异步回调
  10. C++异常处理(一) - iStack
  11. nginx学习笔记001---Nginx的启动、停止与重启
  12. CentOS7编译安装libc++和libc++abi
  13. java:eclipse:windows开发环境log4j系统找不到指定的路径
  14. c++中的MFC可视化编程
  15. 精读CSS权威指南第四版(4)
  16. oracle分页优化
  17. Github开始强制使用PAT(Personal Access Token)了
  18. 移动终端管理系统的关键技术研究 - 转贴
  19. 【金猿案例展】某远程教育机构——以用户为中心 打造优势教学内容和智慧化学习产品...
  20. 爱普生Epson PictureMate 240 打印机驱动

热门文章

  1. 华为OD机试用Python实现 -【几何平均值最大子数组】| 2023年3月被抽中
  2. php正则表达式. 123,preg_match中的正则表达式和模式 – PHP适合123-23-345
  3. 双软企业认证材料 软件产品认证
  4. 前沿重器[21-25] | 合集:两万字聊对话系统
  5. EasyUI切换主题风格
  6. 如何放大淘客的收入。
  7. 如何正常识别段码液晶屏好坏?
  8. 智猪博弈论——大猪的抉择
  9. pygame 游戏开发 基础物理建模 重力系统模拟
  10. Coinsbit交易所将为农业资产通证化软件平台Kernel-Trade进行IEO