【ES6】—let 声明方式
一、不属于顶层对象window
- let 关键字声明的变量,不会挂载到window的属性
var a = 5
console.log(a)
console.log(window.a)
// 5
// 5
// 变量a 被挂载到window属性上了 , a = window.alet b = 6
console.log(b)
console.log(window.b)
// 6
// undefined
小节:
var 声明的变量,会挂载到window的属性,容易造成全局变量污染
二、不允许重复声明
- let 关键字 不可以声明相同的变量,在运行阶段直接报错
var a = 5
var a = 6
console.log(a)
// 6 let b = 7
let b = 8
console.log(b)
// Uncaught SyntaxError: Identifier 'b' has already been declared
// b已经声明过了,不允许重复声明
小节:
var 可以声明相同变量,后声明的变量的值会覆盖前面声明的变量的值
三、不存在变量提升
- let 关键字不会把变量声明,放到代码的最前面,只会再执行时声明
console.log(a)
var a = 6
// 等同于
var a
console.log(a)
a = 6
// undefinedconsole.log(b)
// 报错, 没有声明
let b = 7
小节:
使用 var 关键字声明的变量,无论代码在何处,都会把变量声明放到代码的最前面
四、暂时性死区
- 暂时性死区:先使用变量,再使用let关键字声明变量,就会出现暂时性死区,因为没有先声明就赋值了
var a = 5
if (true) {a = 6let a
}
// Uncaught ReferenceError: Cannot access 'a' before initialization
小节:
a 首先是全局变量,然后 给a 赋值,再使用let 关键字 声明变量 a, 这时候a 变成了局部变量,局部变量 a 先被使用了,再声明就会出现暂时性死区
- 隐蔽的暂时性死区
// 给参数设置默认值
function foo (a = b, b =2) {console.log(a, b)
}
foo()
// Uncaught ReferenceError: Cannot access 'b' before initialization
// b 再声明之前,你不能使用它
// a = b, b =2 因为代码从左往右执行, a = b, 表示把b的值赋给a, 但是b现在还没有声明和赋值,所以就出现了暂时性死区
- 改造后
// 给参数设置默认值
function foo (a = 2, b = a) {console.log(a, b)
}
foo()
// 2 2
// a = 2, b = a , 先声明了a 并赋值,再把a的值赋给b ,是没有问题的
小节:
局部变量先声明,再赋值,就不会出现暂时性死区
五、块级作用域
- var 声明的变量只有全局作用域和函数作用域,没有块级作用域, 所以 var 声明变量再任何地方都可以使用
for (var i =0; i< 3; i++) {console.log('循环内:' + i)
}
console.log('循环外', + i)
// 循环内:0
// 循环内:1
// 循环内:2
// 循环外 3
- 块级作用域: 指的是大括号{}里面,使用let关键字 声明的变量,只能在大括号里面使用,大括号外无法使用
把 var 改成 let
for (let i =0; i< 3; i++) {console.log('循环内:' + i)
}
console.log('循环外', + i)
// 循环内:0
// 循环内:1
// 循环内:2
// Uncaught ReferenceError: i is not defined , i没有声明
- var 没有块级作用域,示例2
if (false) {var a = 5
}
console.log(a)
// undefined
小节:
因为 var 没有块级作用域,加上var 可以变量提升, 所以代码等同于
var a
if (false) {a = 5
}
console.log(a)
// undefined
把 var 改造成let
if (false) {let a = 5
}
console.log(a)
// Uncaught ReferenceError: a is not defined
// a 因为大括号使用let关键声明,所以有块级作用域,大括号外无法使用
- ES6 中使用let 关键字声明的变量 所产生块级作用域,必须要有大括号,不能省略, 否则报错
if(true) let a =5
// Uncaught SyntaxError: Lexical declaration cannot appear in a single-statement context
优化后
if(true){let a =5
}
- 常见面试题
for (var i =0; i < 3 ; i++) {setTimeout(function (){console.log(i)})
}
// 打印3 个 3
因为遇到setTimeout是异步任务,会先放入事件处理器中,等待运行栈的同步任务执行完成之后,再把异步任务放入任务队列中,再从任务队列中一个个放入运行栈中执行
小节:每个定时器执行时,都是再for循环之后取值,所以打印3个3
- 通过闭包实现定时器按顺序打印
for (var i = 0; i < 3 ; i++) {// 立即执行函数, 一次性使用(function(j){ // j 表示形参setTimeout(function (){console.log(j)})})(i) // i 表示实参
}
闭包: 有一个外部函数和内部函数,内部函数会调用外部函数的变量,这样就可以保证外部函数的变量的状态值不被释放,因为内部函数一直再引用着外部函数的值
- 通过let 关键字实现定时器按顺序打印
for (let i = 0; i < 3 ; i++) {setTimeout(function (){console.log(i)})
}
通过 babel在线工具 实现 ES6 语法转 ES5语法
var _loop = function _loop(i) {setTimeout(function (){console.log(i)})
}
for (var i = 0; i < 3; i++) {_loop(i);
}
小节:当使用let关键字声明的变量时,被定时器调用,转换为ES5语法时,自动的转换为闭包的形式,保留i循环的每一个的状态值不被释放
相关文章:
【ES6】—let 声明方式
一、不属于顶层对象window let 关键字声明的变量,不会挂载到window的属性 var a 5 console.log(a) console.log(window.a) // 5 // 5 // 变量a 被挂载到window属性上了 , a window.alet b 6 console.log(b) console.log(window.b) // 6 // undefin…...

【数据分析入门】Jupyter Notebook
目录 一、保存/加载二、适用多种编程语言三、编写代码与文本3.1 编辑单元格3.2 插入单元格3.3 运行单元格3.4 查看单元格 四、Widgets五、帮助 Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。 …...
反射知识总结
1、反射概述 反射是指对于任何一个Class类,在"运行的时候"都可以直接得到这个类全部成分。在运行时,可以直接得到这个类的构造器对象:Constructor在运行时。可以直接得到这个类的成员变量对象:Field在运行时,…...

MongoDB 安装 linux
本文介绍一下MongoDB的安装教程。 系统环境:CentOS7.4 可以用 cat /etc/redhat-release 查看本机的系统版本号 一、MongoDB版本选择 当前最新的版本为7.0,但是由于7.0版本安装需要升级glibc2.25以上,所以这里我暂时不安装该版本。我们选择的是6.0.9版本…...

什么是KNN( K近邻算法)
什么是KNN( K近邻算法) 虽然名字中有NN,KNN并不是哪种神经网络,它全名K-Nearest-Neighbors:K近邻算法,是机器学习中常用的分类算法。 物以类聚,人以群分。KNN的基础思想很简单,要判断一个新数据的类别&…...
Linux查看命令总结
1.动态实时查找命令 使用以下命令的前提是需要在找到日志位置 tail -f server.log 实时展示日志末尾内容,默认最后10行,相当于增加参数 -n 10 tail -n filename; tail命令扩展 查看日志最后20行内容并实时更新日志 tail -f -n 20 server.log或者 tail -fn 20 ser…...
npm报错 Cannot find module ‘@vuepress\core\node_m
通常是由于缺少依赖包或者依赖包版本不兼容引起的。可以尝试以下步骤来解决这个问题: 确保您的项目的依赖包是最新的,可以运行 npm update 命令来更新依赖包。 如果更新依赖包后仍然有问题,可以尝试删除 node_modules 文件夹,并重…...

mybatis入门环境搭建及CRUD
一、MyBatis介绍 1.1 MyBatis的定义 MyBatis是一个开源的Java持久化框架,它可以帮助开发人员简化数据库访问的过程。它提供了一种将SQL语句与Java代码进行映射的方式,使得开发人员可以通过简单的配置文件来定义SQL语句,而无需编写繁琐的JDB…...
小程序变化历史记录
2023年8月26 小程序机号快速验证组件将需要付费使用 自2023年8月26日起,手机号快速验证组件将需要付费使用。标准单价为:每次组件调用成功,收费0.03元 https://blog.csdn.net/qq_37215621/article/details/131453551 自2023年9月1日起&…...

jstack(Stack Trace for Java)Java堆栈跟踪工具
jstack(Stack Trace for Java)Java堆栈跟踪工具 jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件)。 线程快照就是当前虚拟机内每一条线程正在执…...
linux面试题整理
目录标题 基础篇1.说下企业为什么用linux而不用windows?2.linux学过什么,怎么学习的?3.linux基本命令4.linux查看端口、进程、文件类型、挂载5.使用top命令之后前五行会显示什么内容?6.linux怎么查找一个文件7.vim进去后的各种操作…...

Linux笔记
Linux基础命令 Linux的目录结构 /,根目录是最顶级的目录了Linux只有一个顶级目录:/路径描述的层次关系同样适用/来表示/home/itheima/a.txt,表示根目录下的home文件夹内有itheima文件夹,内有a.txt ls命令 功能:列出…...

Dockerfile制作Web应用系统nginx镜像
目录 1.所需实现的具体内容 2.编写Dockerfile Dockerfile文件内容: 默认网页内容: 3.构建镜像 4.现在我们运行一个容器,查看我们的网页是否可访问 5.现在再将我们的镜像打包并上传到镜像仓库 1.所需实现的具体内容 基于centos基础镜像…...

lama-cleaner:基于SOTA AI 模型Stable Diffusion驱动的图像修复工具
介绍 由 SOTA AI 模型提供支持的图像修复工具。从照片中删除任何不需要的物体、缺陷、人物,或擦除并替换(由Stable Diffusion驱动)照片上的任何东西。 特征 1.多种SOTA AI模型 擦除模型:LaMa/LDM/ZITS/MAT/FcF/Manga 擦除和替…...

LVS-DR模式以及其中ARP问题
目录 LVS_DR LVS_DR数据包流向分析 LVS-DR中ARP问题 问题一 问题二 解决ARP的两个问题的设置方法 LVS-DR特点 LVS-DR优缺点 优点 缺点 LVS-DR集群构建 1.配置负载调度器 2.部署共享存储 3.配置节点服务器 4.测试 LVS 群集 LVS_DR LVS_DR数据包流向分析 客户端…...
2023-08-15 Untiy进阶 C#知识补充5——C#6主要功能与语法
文章目录 一、概述二、静态导入三、异常筛选器四、nameof 运算符 注意:在此仅提及 Unity 开发中会用到的一些功能和特性,对于不适合在 Unity 中使用的内容会忽略。 一、概述 C#6 的新增功能和语法主要包含: >运算符(C#…...

最新两年工作经验总结
最新两年工作经验总结 前言URP的使用1:如何开启URP1、老项目升级为URP2、创建新项目时选择URP创建 2:URP阴影的设置 PolyBrush的使用(地图编辑插件)制作山峰or低谷边缘柔化雨刷上色制造场景中的物体贴图地形创建容易踩坑的点ProBu…...
MATLAB——线性神经网络预测程序
有导师学习神经网络的分类-鸢尾花种类识别 学习目标: 线性神经网络收敛速度和精度比前一篇博客的感知器神经网络要高, 主要应用在函数逼近,信号预测,模式识别,系统辨识方面 clear all; close all; P[1.1 2.2 3.1 4.1]…...

面试之快速学习STL-迭代适配器
先放一张大图 参考:http://c.biancheng.net/view/7255.html 1. 反向迭代器 例子: std::list<int> values{1,2,3,4,5};auto start_it values.rbegin();const auto end_it values.rend();//start_it end_it std::reverse_iterator<std::lis…...

【Linux】【驱动】杂项设备驱动
【Linux】【驱动】杂项设备驱动 Linux三大设备驱动1. 我们这节课要讲的杂项设备驱动是属于我们这三大设备驱动里面的哪个呢?2.杂项设备除了比字符设备代码简单,还有别的区别吗?3.主设备号和次设备号是什么? 挂载驱动 杂项设备驱动是字符设备驱动的一种࿰…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...