了解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 相关文章推荐
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
Jun 19 Javascript
Jquery倒数计时按钮setTimeout的实例代码
Jul 04 Javascript
不同Jquery版本引发的问题解决
Oct 14 Javascript
js实现checkbox全选和反选示例
May 01 Javascript
浅析javascript中的事件代理
Nov 06 Javascript
解决AngualrJS页面刷新导致异常显示问题
Apr 20 Javascript
js和jquery中获取非行间样式
May 05 jQuery
npm国内镜像 安装失败的几种解决方案
Jun 04 Javascript
VUE-Table上绑定Input通过render实现双向绑定数据的示例
Aug 27 Javascript
vue-cli整合vuex的时候,修改actions和mutations,实现热部署的方法
Sep 19 Javascript
vue 实现通过vuex 存储值 在不同界面使用
Nov 11 Javascript
前端性能优化建议
Sep 17 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 session处理的定制
2009/03/16 PHP
PHP中使用socket方式GET、POST数据实例
2015/04/02 PHP
PHP中常见的缓存技术实例分析
2015/09/23 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
2020/04/13 PHP
THINKPHP-Apache服务器中使用Alias虚拟目录URL重写 隐藏index.php
2021/03/09 PHP
发现的以前不知道的函数
2006/09/19 Javascript
js查错流程归纳
2012/05/04 Javascript
缓动函数requestAnimationFrame 更好的实现浏览器经动画
2012/12/07 Javascript
jQuery中的$.ajax()方法应用
2014/05/06 Javascript
jquery实现表单输入时提示文字滑动向上效果
2015/08/10 Javascript
jQuery实现平滑滚动的标签分栏切换效果
2015/08/28 Javascript
JavaScript Math 对象常用方法总结
2016/04/28 Javascript
jQuery的层级查找方式分析
2016/06/16 Javascript
走进AngularJs之过滤器(filter)详解
2017/02/17 Javascript
JS文件/图片从电脑里面拖拽到浏览器上传文件/图片
2017/03/08 Javascript
移动端触摸滑动插件swiper使用方法详解
2017/08/11 Javascript
Vue实现PopupWindow组件详解
2018/04/28 Javascript
详解如何解决Vue和vue-template-compiler版本之间的问题
2018/09/17 Javascript
原生JS实现简单的无缝自动轮播效果
2018/09/26 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
2020/07/26 Javascript
python socket 超时设置 errno 10054
2014/07/01 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
2017/11/01 Python
python中字符串比较使用is、==和cmp()总结
2018/03/18 Python
python实现Dijkstra静态寻路算法
2019/01/17 Python
python f-string式格式化听语音流程讲解
2019/06/18 Python
Python 仅获取响应头, 不获取实体的实例
2019/08/21 Python
Python求凸包及多边形面积教程
2020/04/12 Python
scrapy redis配置文件setting参数详解
2020/11/18 Python
Erwin Müller穆勒家居瑞士官网:您整个家庭的邮购公司
2019/12/28 全球购物
大学生简历的个人自我评价
2013/12/04 职场文书
运动会稿件100字
2014/02/21 职场文书
竞聘自述材料
2014/08/25 职场文书
违反交通安全法检讨书
2014/10/24 职场文书
JavaScript 原型与原型链详情
2021/11/02 Javascript