ES6-let

news2024/12/24 11:28:07

一、基本语法

ES6 中的 let 关键字用于声明变量,并且具有块级作用域。

- 语法:
	let 标识符;
	let 标识符=初始值;
- 规则:
	1.不能重复声明
		let不允许在相同作用域内重复声明同一个变量
	2.不存在变量提升
		在同一作用域内,必须先声明才能试用
	3.暂时性死区

二、规则示例

1)不能重复声明

  • 正确声明
    <script>
      //声明一个变量
      let a;
      //同时声明多个变量
      let b, c, d;
      //声明变量的同时并赋值
      let num_1 = 1;
      let num = 1,
        str = "123",
        arr = [],
        obj = {};

    </script>
  • 错误声明
    在这里插入图片描述

2)不存在变量提升

let所声明的变量一定要在声明后使用,否则报错

  • 正确示例
      let a = 1;
      console.log("a=" + a); //a=1
      //可以在控制台查看

在这里插入图片描述

  • 错误示例
      console.log(a);
      let a = 1;

在这里插入图片描述

3)暂时性死区

- 只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响

- 在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”
      let a = 1;
      function test() {
        let a = 2;
        console.log(a);
      }
      test();
你会惊奇这里为什么可以声明两个a?为什么输出的a是2- 问题一:为什么可以声明两个啊?
- 答案:两个a在不同的作用域
- 问题二:为什么输出的a是2- 答案:暂时性死区的特性,只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,
		不再受外部的影响,即在函数test内,a“绑定”了这个区域,不受外部a=1的影响。

三、区别一下var和let在for循环中的声明

      function test_let() {
        let arr_let = [];
        for (let i = 0; i < 10; i++) {
          //   console.log(i);
          arr_let[i] = function () {
            console.log(i);
          };
        }
        arr_let[5](); // 5
      }
      function test_var() {
        var arr_var = [];
        for (var i = 0; i < 10; i++) {
          arr_var[i] = function () {
            console.log(i);
          };
        }
        arr_var[5](); // 10
      }
      console.log("let的for循环示例");
      test_let();
      console.log("var的for循环示例");
      test_var();
- 问题一:为什么函数test_let输出的是5- 答案:函数test_let中的for循环中的变量i是用let声明的,
		所以变量i在每次循环中都是一个新的变量,当前的i仅在本次循环有效 
		所以数组arr_let里面的 i 其实是不同的变量,即最后输出5- 补充:若每次循环的变量 i 都是重新声明的,如何知道前一个循环的值?
		这是因为 JavaScript 引擎内部会记住前一个循环的值
- 问题二:为什么函数test_var输出的是10- 答案:函数test_var中的for循环中的变量i是var命令声明的,在全局范围内都有效,
	   所以全局只有一个变量i,每一次循环,变量i的值都会发生改变,
	   而循环内被赋给数组arr_var的函数内部的console.log(i)里面的i指向的就是全局的i。
	   也就是说,所有数组arr_var的成员里面的i,指向的都是同一个i,
	   导致运行时输出的是最后一轮的i的值,也就是 10

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文阅读-一种用于大规模分布式文件系统中基于深度强化学习的自适应元数据管理方案

名称&#xff1a; An Adaptive Metadata Management Scheme Based on Deep Reinforcement Learning for Large-Scale Distributed File Systems I. 引言 如今&#xff0c;大型集群文件系统的规模已达到PB甚至EB级别&#xff0c;由此产生的数据呈指数级增长。系统架构师不断设…

算法学习——华为机考题库7(HJ41 - HJ45)

算法学习——华为机考题库7&#xff08;HJ41 - HJ45&#xff09; HJ41 称砝码 描述 现有n种砝码&#xff0c;重量互不相等&#xff0c;分别为 m1,m2,m3…mn &#xff1b; 每种砝码对应的数量为 x1,x2,x3…xn 。现在要用这些砝码去称物体的重量(放在同一侧)&#xff0c;问能称…

STM32--揭秘中断(简易土货版)

抢占优先级响应优先级 视频学习--中断​​​​​​​

数据结构----队列(Queue)的概念、队列的使用、模拟实现队列、循环队列、模拟实现循环队列、双端队列、模拟实现双端队列

文章目录 1 概念2 队列的使用3 队列模拟实现4 循环队列4.1 循环队列 概念4.1 循环队列模拟实现 5. 双端队列 (Deque)6 用队列实现栈7 用栈实现队列 1 概念 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有…

会计的记账凭证

目录 一. 记账凭证的填制与审核1.1 收付款凭证1.2 转账凭证1.3 单式记账凭证 二. 记账凭证的编号 \quad 一. 记账凭证的填制与审核 \quad \quad 1.1 收付款凭证 \quad 注意︰ 凡是涉及货币资金之间收付款的业务如将库存现金存入银行或从银行提取现金等类经济业务。在实际工作中…

macOS的设置与常用软件(含IntelliJ IDEA 2023.3.2 Ultimate安装,SIP的关闭与开启)

目录 1 系统设置1.1 触控板1.2 键盘 2 软件篇2.1 [科学上网](https://justmysocks5.net/members/)2.1 [安装Chrome浏览器](https://www.google.cn/chrome/index.html)2.2 [安装utools](https://www.u.tools)2.3 [安装搜狗输入法](https://shurufa.sogou.com/)2.4 [安装snipaste…

Qt多语言翻译

Qt多语言翻译概述 Qt提供了非常简单易用的多语言翻译机制&#xff0c;其核心类为QTranslator.概括来说就是利用Qt的lupdate工具将项目中所有tr函数包裹的字符串提取到.ts文件中&#xff0c;然后使用Qt Linguist由专门的翻译人员对提取的.ts文件进行逐个单词短语的翻译工作. 翻译…

MkDocs 部署指南

简介 MkDocs 可以同时编译多个 markdown 文件&#xff0c;形成书籍一样的文件。有多种主题供你选择&#xff0c;很适合项目使用。 MkDocs 是快速&#xff0c;简单和华丽的静态网站生成器&#xff0c;可以构建项目文档。文档源文件在 Markdown 编写&#xff0c;使用单个 YAML …

绝世唐门:霍挂六个十万年魂环,一穿七灭团再现,淘汰赛顺利晋级

Hello,小伙伴们&#xff0c;我是拾荒君。 国漫《斗罗大陆2绝世唐门》第32期超前爆料&#xff0c;霍雨浩开局便释放六个十万年魂环&#xff0c;以绝对的气场碾压天灵学院代表队。首次参与高级魂师大赛&#xff0c;霍雨浩便大放异彩秀出超级霍挂&#xff0c;此等操作就连当初的唐…

2023.12 淘天-数科 已offer

文章目录 岗位信息1面ld 12.17 1H2面 VP 12.18 40min3面 HR 12.2012.21offer薪资方案沟通 岗位信息 1面ld 12.17 1H &#xff08;是一个从业估计很长时间前辈&#xff0c;很平和&#xff0c;感觉能学到很多东西&#xff09; 自我介绍项目深究1.说下自己工作里最有成就感的事和…

【用Unity开发一款横板跳跃游戏部分需要学习的技术点指南】

*** 用Unity开发一款横板跳跃游戏部分需要学习的技术点指南 空洞骑士是一款基于横板平台跳跃的传统风格2D动作冒险游戏&#xff0c;庞大的游戏世界交错相通&#xff0c;玩家控制小虫子去探索幽深黑暗的洞穴&#xff0c;成为了一代人茶余饭后的惦念&#xff0c;深受玩家喜爱。 …

Peter算法小课堂—Dijkstra最短路算法

大家好&#xff0c;我们人见人爱、花见花开、车见车爆胎的Peter Pan来啦&#xff0c;hia~hia~hia。今天&#xff0c;我们今天来学习毒瘤的最短路算法啦。啊这……什么是Dijkstra算法&#xff1f;长文警告⚠ 正经点啊 手算样例 大家思考一下&#xff0c;你在手算样例的时候&am…

MATLAB实现随机森林(RF)回归与自变量影响程度分析

本文分为两部分&#xff0c;首先是对代码进行分段、详细讲解&#xff0c;方便大家理解&#xff1b;随后是完整代码&#xff0c;方便大家自行尝试。另外&#xff0c;关于基于MATLAB的神经网络&#xff08;ANN&#xff09;代码与详细解释&#xff0c;我们将在后期博客中介绍。 1…

Redis常用数据结构与应用场景

常用数据结构 StringHashListSetZset String常用操作 String应用场景 Hash常用操作 hash应用场景 Hash结构优缺点 优点 同类数据归类整合存储,方便数据管理相比String操作消耗内存与spu更小相比string更节省空间 缺点 过期功能不能使用在field上,只用用在key上Redis集群…

Navicate 连接云服务器MySQL

Navicate 连接云服务器MySQL 1.打开Navicate,点击左上角的连接,选择MySQL 第一步:第一个页面是常规,按照图上的标注填写 第二步,点击 SSH ,进入下面的页面 第三步&#xff0c;点击测试连接

FreeRTOS任务相关的API函数

本篇文章记录我学习FreeRTOS的任务相关的API函数。主要涉及FreeRTOS的任务创建和删除函数、任务挂起和恢复函数。希望我的分享对你有所帮助。 读者如果需要实战FreeRTOS动态/静态任务创建和删除&#xff0c;可以参考以下文章&#xff1a; FreeRTOS动态 / 静态创建和删除任务-CS…

C++初阶 内存管理和模板

目录 一、new 1.1什么是new&#xff1f; 1.2为什么要有new&#xff1f; 1.3使用new 1.4 new的超级好处 二、delete 2.1什么是delete&#xff1f; 2.2为什么要有delete&#xff1f; 2.3使用delete 三、 malloc / free和new / delete的共同点和区别 四、浅谈模板 4.1什…

嵌入式学习第三篇——51单片机

目录 1&#xff0c;嵌入式系统 1&#xff0c;嵌入式系统的定义 2&#xff0c;单片机的定义 2&#xff0c;51单片机 1&#xff0c;开发环境 2&#xff0c;开发板使用的基本思路 1&#xff0c;查看原理图&#xff0c;查看芯片手册 2&#xff0c;获得调用硬件的管…

使用Arcgis对欧洲雷达高分辨率降水数据重投影

当前需要使用欧洲高分辨雷达降水数据&#xff0c;但是这个数据的投影问题非常头疼。实际的投影应该长这样&#xff08;https://gist.github.com/kmuehlbauer/645e42a53b30752230c08c20a9c964f9?permalink_comment_id2954366https://gist.github.com/kmuehlbauer/645e42a53b307…

4K Video Downloader forMac/win:畅享高清视频下载的终极利器!

在如今的数字时代&#xff0c;高清视频已经成为人们生活中不可或缺的一部分。无论是观看精彩的电影、音乐视频&#xff0c;还是学习教育类的在线课程&#xff0c;我们都希望能够以最清晰流畅的方式来欣赏。而为了满足这一需求&#xff0c;我们需要一款功能强大的高清视频下载软…