| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> web前端培训 - let关键字声明块范围的变量 -> 正文阅读 |
|
[JavaScript知识库]web前端培训 - let关键字声明块范围的变量 |
JavaScript let 关键字简介 在 ES5 中,当我们使用 var 关键字声明一个变量时,变量的作用域要么是全局的,要么是局部的。如果在函数之外声明变量,则变量的范围是全局的。在函数内声明变量时,变量的作用域是局部的。 ES6 提供了一种使用 let 关键字声明变量的新方法。let 关键字类似于 var 关键字,只是这些变量是块作用域的。例如: let variable_name; 首先,声明一个变量x并将其值初始化为 10。 其次,x在if块内声明一个同名的新变量,但初始值为 20。 第三,输出块x内和if块后 变量的值。 因为let关键字声明了一个块范围的变量,块x内的变量if是一个新变量,它隐藏了x在脚本顶部声明的变量。因此,x控制台中的值为20。 当 JavaScript 引擎完成执行if块时,块x内的变量if超出范围。因此, 块x后面的变量的if 值为 10。 JavaScript let 和全局对象 当您使用var关键字声明一个全局变量时,您将该变量添加到全局对象的属性列表中。对于 Web 浏览器,全局对象是window. 例如: 它的工作原理: 首先,声明一个变量 x 并将其值初始化为 10。 其次,在 if 块中声明一个同名 x 的新变量,但初始值为 20。 第三,输出 if 块内部和之后的变量 x 的值。 因为 let 关键字声明了一个块范围的变量,所以 if 块中的 x 变量是一个新变量,它会隐藏在脚本顶部声明的 x 变量。因此,控制台中 x 的值为 20。 当 JavaScript 引擎完成执行 if 块时, if 块内的 x 变量超出范围。因此,if 块后面的 x 变量的值为 10。 JavaScript let 和全局对象 当我们使用 var 关键字声明全局变量时,我们将该变量添加到全局对象的属性列表中。在 Web 浏览器的情况下,全局对象是窗口。例如: var a = 10; for循环中的JavaScript let和回调函数 请参阅以下示例。 for (var i = 0; i < 5; i++) { 5 在 ES5 中,您可以通过创建另一个作用域来解决此问题,以便每个回调函数引用一个新变量。并且要创建一个新的作用域,您需要创建一个函数。通常,您可以按如下方式使用IIFE模式: 在这个例子中,变量 i 是一个全局变量。在循环之后,它的值为 5。当回调函数被传递给 setTimeout() 函数执行时,它们引用了相同的变量 i,值为 5。 在 ES5 中,我们可以通过创建另一个范围来解决此问题,以便每个回调函数引用一个新变量。而要创建一个新的范围,我们需要创建一个函数。通常,我们按如下方式使用 IIFE 模式: for (var i = 0; i < 5; i++) { 0 for (let i = 0; i < 5; i++) { for (let i = 0; i < 5; i++) { 重新声明 var 关键字允许我们重新声明变量而不会出现任何问题: var counter = 0; let counter = 0; Uncaught SyntaxError: Identifier ‘counter’ has already been declared JavaScript let 变量和提升 让我们检查以下示例: { Uncaught ReferenceError: Cannot access ‘counter’ before initialization 实际上,JavaScript 引擎会将let关键字声明的变量提升到块的顶部。但是,JavaScript 引擎不会初始化该变量。因此,当你引用一个未初始化的变量时,你会得到一个ReferenceError. 暂时死亡区(TDZ) 以下示例说明时间死区是基于时间的,而不是基于位置的。 在此示例中,在声明计数器变量之前访问它会导致 ReferenceError。 我们可能认为使用 let 关键字声明的变量不会提升,但确实如此。 事实上,JavaScript 引擎会将 let 关键字声明的变量提升到块的顶部。但是,JavaScript 引擎不会初始化该变量。因此,当我们引用一个未初始化的变量时,我们会得到一个 ReferenceError。 时间死亡区 (TDZ) 由 let 关键字声明的变量具有所谓的时间死区 (TDZ)。TDZ 是从块开始到处理变量声明的时间。 以下示例说明时间死区是基于时间的,而不是基于位置的。 { // enter new scope, TDZ starts
} 首先,花括号开始一个新的块作用域,因此,TDZ 开始。 其次,log() 函数表达式访问消息变量。但是,log() 函数尚未执行。 第三,声明消息变量并将其值初始化为10。从块作用域开始到消息变量被访问的时间称为临时死区。当 JavaScript 引擎处理声明时,TDZ 结束。 最后,调用访问 TDZ 之外的消息变量的 log() 函数。 请注意,如果我们访问由 TDZ 中的 let 关键字声明的变量,我们将得到一个 ReferenceError,如下例所示。 { // TDZ starts 临时死亡区可防止您在声明之前意外引用变量。 总结 使用 let 关键字声明的变量是块作用域的,不会初始化为任何值,也不会附加到全局对象。 使用 let 关键字重新声明变量会导致错误。 使用 let 关键字声明的变量的时间死区从块开始,直到初始化被评估。 如何学好前端开发是关键: 前端技术每年都会不断更新,自学前端容易学不到最前沿的课程,学习前端开发建议大家还是要选择培训为好,推荐爱创课堂,是一家专门做前端教育的学校,爱创课堂是一家以就业为导向的前端培训学校,所学习的就是企业所需要的,培养企业最需要的前端工程师为企业理念,授课以实战课程为主,更多的学习大项目对以后工作有帮助,毕业后轻松就业! |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 8:57:45- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |