了解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 相关文章推荐
删除重复数据的算法
Nov 23 Javascript
JS类中定义原型方法的两种实现的区别
Mar 08 Javascript
JQuery 操作Javascript对象和数组的工具函数小结
Jan 22 Javascript
javascript的tab切换原理与效果实现方法
Jan 10 Javascript
jQuery UI设置固定日期选择特效代码分享
Aug 27 Javascript
react.js CMS 删除功能的实现方法
Apr 17 Javascript
js+SVG实现动态时钟效果
Jul 14 Javascript
Vue头像处理方案小结
Jul 26 Javascript
vue强制刷新组件的方法示例
Feb 28 Javascript
layer弹出层扩展主题的方法
Sep 11 Javascript
基于VUE实现判断设备是PC还是移动端
Jul 03 Javascript
Element Input输入框的使用方法
Jul 26 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的配置文件php.ini
2006/10/09 PHP
一步一步学习PHP(4) php 函数 补充2
2010/02/15 PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
2014/06/22 PHP
php使用cookie保存登录用户名的方法
2015/01/26 PHP
Yii框架连接mongodb数据库的代码
2016/07/27 PHP
php制作基于xml的RSS订阅源功能示例
2017/02/08 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
2018/10/23 PHP
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
Javascript 入门基础学习
2010/03/10 Javascript
JS函数重载的解决方案
2014/05/13 Javascript
加载列表时jquery获取ul中第一个li的属性
2014/11/02 Javascript
ajax+jQuery实现级联显示地址的方法
2015/05/06 Javascript
JavaScript实现自动变换表格边框颜色
2015/05/08 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
2015/05/11 Javascript
使用jquery实现仿百度自动补全特效
2015/07/23 Javascript
D3.js实现直方图的方法详解
2016/09/25 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
2016/12/14 Javascript
vue2.0实战之基础入门(1)
2017/03/27 Javascript
js微信分享实现代码
2020/10/11 Javascript
微信小程序上传图片实例
2018/05/28 Javascript
Javascript实现鼠标点击冒泡特效
2019/12/24 Javascript
javascript实现移动端触屏拖拽功能
2020/07/29 Javascript
Python中property属性实例解析
2018/02/10 Python
Python log模块logging记录打印用法解析
2020/01/20 Python
浅谈图像处理中掩膜(mask)的意义
2020/02/19 Python
Python实现仿射密码的思路详解
2020/04/23 Python
Jupyter notebook如何修改平台字体
2020/05/13 Python
python 根据列表批量下载网易云音乐的免费音乐
2020/12/03 Python
学生会竞选自荐信
2013/10/12 职场文书
营业员演讲稿
2013/12/30 职场文书
幼儿园教育教学反思
2014/01/31 职场文书
高三毕业典礼主持词
2014/03/27 职场文书
教师岗位聘任书范文
2014/03/29 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
2014年教师批评与自我批评思想汇报
2014/09/20 职场文书
创业计划书之物流运送
2019/09/17 职场文书