了解JavaScript中let语句


Posted in Javascript onMay 30, 2019

使用let语句,允许你在JavaScript中创建块范围局部变量。let语句是在JavaScript的ECMAScript 6标准中引入的。

在你往下了解let语句之前,我建议你先查看基于Infragistics jQuery库的Ignite UI,它可以帮助你更快地编写和运行Web应用程序。你可以使用JavaScript库的Ignite UI来快速解决HTML5,jQuery,Angular,React或ASP.NET MVC中复杂的LOB需求。(你可以在这里下载Ignite UI的免费试用版。)

在ECMAScript 6之前,JavaScript有三种类型的范围:

  • 全局范围
  • 函数范围
  • 词汇范围

为了详细探索let语句,请细想下面的代码段:

function foo() {
var x = 9;
if (x > 5) {
var x = 7;
console.log("Value of x in if statement = " + x);
}
console.log("Value of x outside if statement = " + x);
}
foo();

以上代码得到的输出:

了解JavaScript中let语句

在上面的代码中,我们使用var语句声明变量x。因此,变量x的范围是函数范围。if语句内的变量x 就是if语句外创建的变量x 。因此,在你修改if语句块内变量x的值时,也会修改函数中变量x的所有引用的值。

为了避免这种情况,你需要使用块级别范围,let语句允许你创建块范围的局部变量。

修改上面的代码片段,使用let语句声明变量:

function foo() {
var x = 9;
if (x > 5) {
let x = 7;
console.log("Value of x in if statement = " + x);
}
console.log("Value of x outside if statement = " + x);
}
foo();

在上面的代码段中,我们使用let语句来声明范围级局部变量x。因此,在if语句内更新变量x的值不会影响if语句外的变量x的值。

下面是上述代码的输出:

了解JavaScript中let语句

与使用函数范围(或全局范围)声明的变量不同,使用let声明的变量是块范围的:它们只存在于它们定义的块中。

变量提升

使用let声明的变量提升不同于使用var声明的变量。因此,使用let声明的变量没有变量提升,这意味着使用let声明的变量不会移动到执行上下文的顶部。

为了更好地理解这一点,请看以下这段代码:

function foo() {
console.log(x);
console.log(y);
var x = 9;
let y = 67;
}
foo();

作为输出,你将获得变量y的ReferenceError,变量y使用let语句声明。使用let声明的变量不会提升到执行上下文之上。

了解JavaScript中let语句

重新声明变量

你不能在同一个函数或块中使用let重新声明一个变量。这样做会出现语法错误。请看以下代码:

function foo() {
if(true){
let x = 9;
let x = 89; 
}
}
foo();

运行上面的代码会出来一个语法错误,如下所示:

了解JavaScript中let语句

暂时性死区

有时,使用let声明的变量会导致暂时性死区。在以下代码中,let x=x+67 将抛出x未定义的异常。

之所以会出现这个错误,是因为表达式(x + 67)求的是if块范围内局部变量x的值,而不是函数范围内局部变量x的值。运行上面的代码,你会得到这样一个异常:

了解JavaScript中let语句

你可以通过移动声明变量到表达式的上面一行来修复上述错误,如下所示:

块级范围界定是任何编程语言最重要的功能之一,并且随着ECMAScript 6中let语句的引入,JavaScript现在也有了这个功能。使用let语句,允许创建一个作用域在块范围内的变量。这可以解决许多问题,例如全局范围变量的意外修改,闭包中的局部变量,以及帮助编写更清晰的代码。

英文原文:Easy JavaScript, Part 1: Learn the 'let' Statement

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
简单的无缝滚动程序-仅几行代码
May 08 Javascript
javascript实现的动态文字变换
Jul 28 Javascript
推荐8款jQuery轻量级树形Tree插件
Nov 12 Javascript
可以浮动某个物体的jquery控件用法实例
Jul 24 Javascript
jQuery插件echarts实现的循环生成图效果示例【附demo源码下载】
Mar 04 Javascript
详解使用Typescript开发node.js项目(简单的环境配置)
Oct 09 Javascript
Vue实现侧边菜单栏手风琴效果实例代码
May 31 Javascript
在vue中使用Autoprefixed的方法
Jul 27 Javascript
vue-for循环嵌套操作示例
Jan 28 Javascript
详解如何实现Element树形控件Tree在懒加载模式下的动态更新
Apr 25 Javascript
详解VUE前端按钮权限控制
Apr 26 Javascript
Vue 解决通过this.$refs来获取DOM或者组件报错问题
Jul 28 Javascript
koa+jwt实现token验证与刷新功能
May 30 #Javascript
深入理解JavaScript 箭头函数
May 30 #Javascript
socket在egg中的使用实例代码详解
May 30 #Javascript
深入了解JavaScript 私有化
May 30 #Javascript
jQuery模拟html下拉多选框的原生实现方法示例
May 30 #jQuery
Vue CL3 配置路径别名详解
May 30 #Javascript
Vue CLI3中使用compass normalize的方法
May 30 #Javascript
You might like
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
php 异常处理实现代码
2009/03/10 PHP
php在程序中将网页生成word文档并提供下载的代码
2012/10/09 PHP
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
2014/05/15 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
php代码调试利器firephp安装与使用方法分析
2018/08/21 PHP
Javascript实现的鼠标经过时播放声音
2010/05/18 Javascript
自己动手开发jQuery插件教程
2011/08/25 Javascript
jQuery动态添加 input type=file的实现代码
2012/06/14 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
javascript上下方向键控制表格行选中并高亮显示的方法
2015/02/13 Javascript
js实现双击图片放大单击缩小的方法
2015/02/17 Javascript
函数四种调用模式以及其中的this指向
2017/01/16 Javascript
详解微信小程序 wx.uploadFile 的编码坑
2017/01/23 Javascript
JavaScript设计模式之单例模式详解
2017/06/09 Javascript
jquery实现点击a链接,跳转之后,该a链接处显示背景色的方法
2018/01/18 jQuery
详解Chart.js轻量级图表库的使用经验
2018/05/22 Javascript
用Cordova打包Vue项目的方法步骤
2019/02/02 Javascript
基于原生js实现判断元素是否有指定class名
2020/07/11 Javascript
[43:49]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python实现统计文本文件字数的方法
2017/05/05 Python
flask中使用蓝图将路由分开写在不同文件实例解析
2018/01/19 Python
Python简单实现控制电脑的方法
2018/01/22 Python
django富文本编辑器的实现示例
2019/04/10 Python
python 爬取疫情数据的源码
2020/02/09 Python
Python实现GIF图倒放
2020/07/16 Python
Python使用socket模块实现简单tcp通信
2020/08/18 Python
python 监控服务器是否有人远程登录(详细思路+代码)
2020/12/18 Python
kmart凯马特官网:美国最大的打折零售商和全球最大的批发商之一
2016/11/17 全球购物
综合内勤岗位职责
2014/04/14 职场文书
庆元旦活动总结
2014/07/09 职场文书
党的群众路线教育实践活动党员个人整改措施
2014/10/27 职场文书
酒店前台辞职书
2015/02/26 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers
SQL注入的实现以及防范示例详解
2021/06/02 MySQL
python模块与C和C++动态库相互调用实现过程示例
2021/11/02 Python