let/const相关内容(二)

news2025/1/11 20:59:54

let/const作用域提升

1)根据前面所学的内容知道,var定义的变量是可以作用域提升的。

console.log(foo);   // undefined
var foo = "foo"

虽然在第一行中foo还没有被定义,但是在执行代码前,会预编译,先定义foo,但是还没有被赋值,因此是undefined。(参考闭包那节中内容)

2)如果使用let(const是同样道理)声明的变量,在声明之前访问就会报错。

// 报错:ReferenceError(引用错误): Cannot access 'foo' before initialization(初始化)
console.log(foo);
let foo ="foo"

所报的错误是:
在这里插入图片描述
3)那么是不是foo变量只有在代码执行阶段才会被创建呢?不是,可以看一下ECMA262对let和const的描述:这些变量会被创建在包含他们的词法环境被实例化时,但是是不可以访问他们的,直到词法绑定被求值。

可以理解为当这个执行上下文被创建出来的时候,foo变量就已经被创建了,不需要执行到上述第三行代码,就已经被创建了,但是直到这个变量被赋值之前都不能访问它。
在这里插入图片描述
根据这个意思,也就是说执行到上述第二行代码的时候,foo已经被创建了,但是不能够被访问,一直到它被赋值才能访问。

4)那么let和const有没有作用域提升呢?
从上面可以看出,在执行上下文的词法环境创建出来的时候,变量事实上已经被创建了,只是这个变量是不能被访问的,那么变量已经有了,但是不能被访问,是不是一种作用域提升呢?
事实上维基百科并没有对作用域提升有严格的概念解释,那么从字面量上理解:

  • 作用域提升:在声明变量的作用域中,如果这个变量可以在声明之前被访问,那么我们称之为作用域提升。
  • 在这里虽然被创建出来了,但是不能被访问,不能被称之为作用域提升。
    因此这里的观点是:let和const没有进行作用域提升,但是会在执行上下文创建阶段被创建出来。

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

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

相关文章

ModStartBlog v6.6.0 多语言增强,缓存后台优化

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发。 系统完全开源,基于 Apache 2.0 开源协议。 功能特性 丰富的模块市场,后台一键快速安装会…

【完美解决】Github action报错remote: Write access to repository not granted.

报错及效果图报错代码效果图解决方案必要步骤可能有效的步骤报错及效果图 本解决方案是笔者通过Github action运行项目时报错的解决方案,如果是本地运行报此错,未必有效果。 报错代码 remote: Write access to repository not granted. fatal: unable t…

密评FAQ:如何确定网络和通信安全层面的测评对象?

信息系统一般通过网络技术来实现与外界的互联互通,GB/T 39786-2021《信息安全技术信息系统密码应用基本要求》规定了信息系统在网络和通信安全层面的密码应用技术要求,这些要求涉及到通信的主体(通信双方)、信息系统与网络边界外建…

(1)深入理解Java虚拟机-内存模型

深入理解Java虚拟机 Java虚拟机运行时数据区 程序计数器 ​ 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的 字节码的行号指示器。在Java虚拟机的概念模型里 [1] ,字节码解释器工作时…

大学开学必备清单、大学生必备的五件电子产品

转眼间就到了新一年的春季开学,在校生进入了新的一个年级学习。电子产品早就成为每个人的必备,尤其是大学生在校时期,更是上网课、日常查询资料的必备,当然还有一些社交、娱乐的因素也都是通过各式各样的电子产品来满足和实现。接…

android12 rockchip预置APK流程

方法一: 根据RK文档, 预制APK很简单, 首先source 环境之后执行命令:get _build_var TARGET_DEVICE_DIR 查看目标文件夹, 例如: device/rockchip/rk3568s/ 这个目录有三个文件夹: preinstall 不可卸载 preinstall_del_f…

基于text2vec进行文本向量化、聚类

基于text2vec进行文本向量化、聚类基于text2vec进行文本向量化、聚类介绍安装安装text2vec库安装transformers库模型下载文本向量化使用text2vec使用transformers文本聚类训练流程:训练代码推理流程推理代码基于text2vec进行文本向量化、聚类 介绍 文本向量表征工…

21_ncwireshark

nc&wireshark 一、nc介绍 网上百度就有一堆介绍,平常主要用于监听和连接 二、nc判断端口是否开放 实验环境: win10虚拟机和kali虚拟机 win10虚拟机ip: 192.168.11.142 kali虚拟机ip: 192.168.11.131 此时win10虚拟机,开放了80端口,21端口,3306端口 在kali虚拟机使用…

【书】只会功能测试的我,核心竞争力在哪里?

在现实工作中,测试的工作在很多人眼里就是“点点点”,特别是在推进开发自测或者向上级回报的时候,测试的工作显得那么平白无奇。 不仅是在公司内部,在进行面试的时候也会被问到,你觉得你的优势在哪里? 以上…

BlockingQueue(阻塞队列)详解

一. 前言 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员&…

上海亚商投顾:A股三大指数震荡涨跌各异 大消费全天活跃

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。市场情绪沪指今日窄幅震荡,创业板指小幅冲高后回落,科创50指数盘中涨近1.5%,随后涨幅明显…

gdb与gdbserver的使用

GDB调试示例以调试可执行程序gdbDebug为例,gdbDebug.cpp内容如下:使用gdb 启动gdbDebug程序左侧为gdb调试,右侧为gdbDebug.cpp内容GDB与GDBServer调试示例以调试可执行程序gdbDebug为例,gdbDebug.cpp内容如下:使用gdbs…

StarRocks荣获2022年度最具潜力数据库奖

近日,墨天轮颁布了《2022年度数据库获奖名单》,通过墨天轮排行榜排名及年度得分、生态建设、市场活动、市场份额、专利数等38个综合指标进行遴选,评选出2022年的数据库重要奖项,期望能够通过多维度评选,呈现出数据库产…

客户在国内,挑选海外服务器供应商有什么技巧?

​  一直以来,基于互联网管理的严格要求,在使用中国大陆服务器放置网站时,是需要备案手续的,这个手续时长快则7天,慢则也有接近1个月的情况,复杂耗时,当然,这也是对建站成本的增加…

程序员想兼职赚钱?这几个渠道你一定要知道?

某一天当一个程序员,一拍脑门想要兼职,赚点小钱,于是他打开了知乎,打开了百度搜索兼职。结果弹出了一大部分有兼职要视频剪辑的,写文稿的等等等等。逛了一圈,发现根本没有自己合适的兼职。 我想说&#xff…

0201 设置/修改元素内容和属性

document.write()方法文本内容追加到</body>前面的位置文本中标签会被解析<script>document.write(hello world)document.write(<h3>你好世界</h3>)</script>innerText属性将文本内容添加更新到任意标签位置文本包含的标签不会被解析<style&g…

JavaScript 类与类型判断

JavaScript中的数据类型 JavaScript的数据类型大致分为两种&#xff1a;原始类型、对象类型。 原始类型&#xff1a;数字Number、字符串String、布尔值boolean、以及两个特殊值(null、undefined). 对象类型&#xff1a;数组Array、函数Function、日期Date、正则RegExp、错误Err…

Small RTOS51 学习笔记(10)Small RTOS51 的移植

个人笔记 文章目录准备一个 51 单片机工程将 Small RTOS51 相关文件添加到工程一个简单的程序运行效果遇到的问题准备一个 51 单片机工程 我打算拿一个现成的 51 单片机工程来移植 Small RTOS51&#xff0c; 当然&#xff0c;也可以重新创建一个新的工程。 将 Small RTOS51 相…

记录一次sql group by 优化记录

最近有个手动任务&#xff0c;需要计算每天的数据量&#xff0c;然后再进行处理。根据这种情况计算&#xff0c;sql是这样的SELECT FROM_UNIXTIME(publish_time / 1000, %Y-%m-%d) date,COUNT(*) as countFROMinfo_article_mainWHEREpublish_time BETWEEN ?AND ?GROUP BY dat…

Windows实时运动控制软核(六):LOCAL高速接口测试之Matlab

今天&#xff0c;正运动小助手给大家分享一下MotionRT7的安装和使用&#xff0c;以及使用Matlab对MotionRT7开发的前期准备。 01 MotionRT7简介 MotionRT7是深圳市正运动技术推出的跨平台运动控制实时内核&#xff0c;也是国内首家完全自主自研&#xff0c;自主可控的Windows…