了解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 相关文章推荐
jquery插件jbox使用iframe关闭问题
Feb 09 Javascript
js最简单的拖拽效果实现代码
Sep 24 Javascript
初学js插入节点appendChild insertBefore使用方法
Jul 04 Javascript
易被忽视的js事件问题总结
May 14 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
Sep 06 Javascript
详解JS中定时器setInterval和setTImeout的this指向问题
Jan 06 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
May 17 Javascript
MVVM框架下实现分页功能示例
Jun 14 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
Sep 12 Javascript
原生JS检测CSS3动画是否结束的方法详解
Jan 27 Javascript
在vue项目中引入vue-beauty操作方法
Feb 11 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
Nov 21 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
PHP单例模式模拟Java Bean实现方法示例
2018/12/07 PHP
浅析PHP7的多进程及实例源码
2019/04/14 PHP
PHP利用百度ai实现文本和图片审核
2019/05/08 PHP
PHP数组实际占用内存大小原理解析
2020/12/11 PHP
jQuery 方法大全方便学习参考
2010/02/25 Javascript
为jQuery增加join方法的实现代码
2010/11/28 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
2012/09/30 Javascript
js判断当前浏览器类型,判断IE浏览器方法
2014/06/02 Javascript
webapp框架AngularUI的demo改造之路
2014/12/21 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
2015/03/18 Javascript
表单元素值获取方式js及java方式的简单实例
2016/10/15 Javascript
jQuery实现简单的下拉菜单导航功能示例
2017/12/07 jQuery
JavaScript实现的超简单计算器功能示例
2017/12/23 Javascript
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
2018/09/04 Javascript
vue 查看dist文件里的结构(多种方式)
2020/01/17 Javascript
JS实现斐波那契数列的五种方式(小结)
2020/09/09 Javascript
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
Python网络爬虫四大选择器用法原理总结
2020/06/01 Python
如何使用python自带IDLE的几种方法
2020/10/10 Python
解决Python import .pyd 可能遇到路径的问题
2021/03/04 Python
CSS3弹性盒模型flex box快速入门心得(必看篇)
2016/05/24 HTML / CSS
俄罗斯优惠券网站:BIGLION
2017/05/21 全球购物
巴黎欧莱雅法国官网:L’Oreal Paris
2019/04/30 全球购物
Araks官网:纽约内衣品牌
2020/10/15 全球购物
STP协议的主要用途是什么?为什么要用STP
2012/12/20 面试题
AJAX的优缺点都有什么
2015/08/18 面试题
运动会通讯稿50字
2014/01/30 职场文书
班委竞选演讲稿
2014/04/28 职场文书
英语演讲稿3分钟
2014/04/29 职场文书
大学拉赞助协议书范文
2014/09/26 职场文书
公务员检讨书
2014/11/01 职场文书
会议欢迎词
2015/01/23 职场文书
南极大冒险观后感
2015/06/05 职场文书
我是特种兵观后感
2015/06/11 职场文书
大学生暑期实践报告
2015/07/13 职场文书
css 中多种边框的实现小窍门
2021/04/07 HTML / CSS