JS新语法let

使用let 定义变量

首先看到个有意思的问题,为什么let要叫let
Why was the name ‘let’ chosen for block-scoped variable declarations in JavaScript?

一、let可以定义作用在块级作用域的变量

//语法
let var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN]];
let test1 = 2;

在react中let几乎可以看为var。
所谓作用在块级可以理解只在一个{}中产生作用,如果在函数中let跟var最大的区别就是var声明变量作用在整个函数中,let情况如下:

letTest() => {let test = 1;{let test = 2; //这是两个不同的变量}
}

let甚至影响不到内部的{}
注意:在switch语句中反而因为只有一个块,可能会写出错误。需要在每个case中创建新的块,就是{}括起来

二、在程序和方法的最顶端声明变量,let不会对全局对象新建属性。

var globalProps = 'global';
let globalProps2 = 'block';
console.log(this.globalProps); 
console.log(this.globalProps2); // undefind

注意这种情况下会报错

let globalProps = 'block';
{var globalProps = 'global';
}

三、暂存死区

let声明的变量直到他们的定义被执行时才初始化。在变量初始化前访问会异常:ReferenceError。
从块顶部到初始化处理之间,就当成暂存死区。理解为在里面变量是不存在的。
调用typeof检测暂存死区中的变量会抛出异常:ReferenceError。

四、相关例子

function test(){var foo = 33;{let foo = (foo + 55); // ReferenceError}
}
test();

由于词法作用域,表达式(foo + 55)内的标识符foo被认为是if块的foo变量,而不是值为33的块外面的变量foo。

在同一行,这个if块中的foo已经在词法环境中被创建了,但是还没有到达(或者终止)它的初始化(这是语句本身的一部分)。

这个if块里的foo还依旧在暂存死区里。
(个人理解:假如能继续运行,这一行后,才算真脱离死区。虽然执行不下去了。也就是调用和声明的时候要注意)
在以下情况下,这种现象可能会使您感到困惑。 let n of n.a已经在for循环块的私有范围内。因此,标识符n.a被解析为位于指令本身(“let n”)中的“ n”对象的属性“ a”。

在没有执行到它的初始化语句之前,它仍旧存在于暂存死区中。

function go(n) {// n here is defined!console.log(n); // Object {a: [1,2,3]}for (let n of n.a) { // ReferenceErrorconsole.log(n);}
}go({a: [1, 2, 3]});

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

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

相关文章

Docker | 入门:安装与配置

Docker | 入门:安装与配置 Docker 和传统虚拟机区别 对于传统虚拟机: 虚拟出一套硬件,运行一个完整的操作系统,并在这个操作系统上安装和运行软件。 对于 Docker: 将一个个容器隔离开。 容器内的应用直接运行在宿主机的内容&am…

党建3d互动虚拟现实网上展厅有何优势?

在数字化浪潮席卷全球的今天,企业如何迅速踏上虚拟世界的征程,开启元宇宙之旅?答案就是——3D虚拟云展。这一创新平台,华锐视点以虚拟现实技术和3D数字建模为基石提供3D云展搭建服务,助力企业轻松搭建起虚拟数字基础设施&#xf…

基于微信小程序的旅游系统的设计与实现

基于微信小程序的旅游系统的设计与实现 Design and Implementation of a Tourism System based on WeChat Mini Program 完整下载链接:基于微信小程序的旅游系统的设计与实现 文章目录 基于微信小程序的旅游系统的设计与实现摘要第一章 绪论1.1 研究背景与意义1.2 国内外研究…

C语言阶段的题目解析

前言 我们C语言已经学习的差不多了,但是C语言之中存在的一些问题与难点我们还不一定能够又快又好地解决,为了夯实我们的基础,我们来练习几道稍微有点难度的C语言习题吧 例题一 题目 int main(void) {unsigned char i 7;int j 0;for (; i…

2024最新华为OD机试试题库全 -【找单词】- C卷

1. 🌈题目详情 1.1 ⚠️题目 给一个字符串和一个二维字符数组,如果该字符串存在于该数组中,则按字符串的字符顺序输出字符串每个字符所在单元格的位置下标字符串,如果找不到返回字符串“N”。 1.需要按照字符串的字符组成顺序搜索,且搜索到的位置必须是相邻单元格,其…

stm32程序死机怎么回事

STM32程序死机可能由多种因素导致,以下是一些常见的原因及解决方法: 供电问题:供电电压不稳定或不在正常工作电压范围内,电源纹波大小过大,都可能导致STM32死机。此外,供电电源中的干扰杂讯也可能对单片机…

Docker-05 Docker容器命令

一、查看容器 查看正在运行的容器: docker ps属性说明CONTAINER ID容器 IDIMAGE所属镜像COMMAND启动容器时运行的命令CREATED创建时间STATUS容器状态PORTS端口NAMES容器名称查看停止的容器: docker ps -f status=exited查看所有容器(包括运行和停止): docker ps -a查看…

Android如何使用XML自定义属性

1、定义 在res/values文件下定义一个attrs.xml文件,代码如下: 2、使用 在布局中使用, 示例代码如下: 3、获取 最终来到这里:

【计算机网络】成功解决 ARP项添加失败:请求的操作需要提升

最近在用Wireshark做实验时候,需要清空本机ARP表和DNS缓存,所以在cmd窗口输入以下命令, 结果发生了错误:ARP项添加失败:请求的操作需要提升 一开始我还以为是操作的命令升级了,但是后面发现其实只是给的权…

vsftpd常见错误代码比对(转载)

一:500错误 1、500 Internal Server Error 内部服务错误:顾名思义500错误一般是服务器遇到意外情况,而无法完成请求。 2、500出错的可能性: a、编程语言语法错误,web脚本错误 b、并发高时,因为系统资源限制…

C++:string 类

在C中定义一个 std::string 字符串可以采用以下几种方式: 1.使用字符串字面量初始化: std::string str "Hello, world!"; 2.使用构造函数初始化: std::string szStringB("Hello wolven"); 3.使用重复字符初始化&am…

FTP 文件传输协议

FTP 文件传输协议 作用 用来传输文件的 FTP协议采用的是TCP作为传输协议, 21号端口用来传输FTP控制命令的, 20号端口用来传输文件数据的 FTP传输模式: 主动模式: FTP服务端接收下载控制命令后,会主动从tcp/20号端口…

iOS pod库包含MRC类

在我们iOS开发过程中,碰到的大部分文件都是基于ARC内存管理的,但也免不了用到一些三方的MRC的代码,这里介绍三种方法来编写包括MRC文件的.podspec文件。 1).在podspec中指定requires_arc:false,同时指定requires_arc的文件,eg: 这样写的好处是别的项目拉取到你pod源码的时候,不…

后端学习记录~~JavaSE篇(Module08-异常 上 )

总览: Java概述: 思维导图文件在本人个人主页上-----资源模块 资源详情(免费下载):Java学习思维导图异常篇资源-CSDN文库https://download.csdn.net/download/m0_61589682/89238330 整体展示:

Spring IOC(二)

1. Bean的定义与获取 1.1 定义Bean 在Spring 中定义Bean的方式主要有三种&#xff1a; 1、基于XML配置文件的方式&#xff08;了解&#xff09;&#xff1a;通常会在配置文件中使用<bean>标签来定义Bean&#xff0c;并设置Bean的属性、依赖关系等信息。 2、基于注解的方…

spring接入socket.io注意事项

因为前端要求&#xff0c;最后我们采用的socket.io来做我们的消息推送&#xff0c;在联调期间遇到了一些问题&#xff0c;这里记录一下&#xff0c;首先我和前端参考了日常记录-SpringBoot整合netty-socketio和Vue3和SpringBoot集成SocketIO&#xff08;WebSocket&#xff09; …

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-6.5, 汇编 led.s,第一次点亮LED灯

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

kaggle(4) Regression with an Abalone Dataset 鲍鱼数据集的回归

kaggle&#xff08;4&#xff09; Regression with an Abalone Dataset 鲍鱼数据集的回归 import pandas as pd import numpy as npimport xgboost import lightgbm import optuna import catboostfrom sklearn.model_selection import train_test_split from sklearn.metrics …

GMSSL编译iOS

一、GMSSL-2.x 国密SDK源码下载&#xff0c;对GMSSL库进行编译生成对应的静态库。执行如下命令&#xff1a; cd到SDK源码目录 cd /Users/xxxx/Downloads/GMSSLV2-master查看SDK适用环境 ./config上图中错误解决方法 使用文本编辑器打开SDK目录下Configure、test/build.info、…

Vue.js(过渡)

1.过渡 Vue 在插入、更新或者移除 DOM 时&#xff0c;提供多种不同方式的应用过渡效果。 Vue 提供了内置的过渡封装组件&#xff0c;该组件用于包裹要实现过渡效果的组件。 语法格式 <transition name "nameoftransition"><div></div> </tr…