了解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 相关文章推荐
Javascript中call和apply函数的比较和使用实例
Feb 03 Javascript
浅谈javascript 函数表达式和函数声明的区别
Jan 05 Javascript
全面介绍javascript实用技巧及单竖杠
Jul 18 Javascript
Ajax分页插件Pagination从前台jQuery到后端java总结
Jul 22 Javascript
jQuery实现base64前台加密解密功能详解
Aug 29 jQuery
Auto.js自动收取自己和好友蚂蚁森林能量脚本
Jun 28 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
Oct 31 Javascript
微信小程序登录session的使用
Mar 17 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
Sep 03 Javascript
jQuery鼠标滑过横向时间轴样式(代码详解)
Nov 01 jQuery
vue elementUI 表单校验的实现代码(多层嵌套)
Nov 06 Javascript
js 对象使用的小技巧实例分析
Nov 08 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之第九天
2006/10/09 PHP
一个php作的文本留言本的例子(一)
2006/10/09 PHP
php中在PDO中使用事务(Transaction)
2011/05/14 PHP
php上传文件中文文件名乱码的解决方法
2013/11/01 PHP
php 判断服务器操作系统的类型
2014/02/17 PHP
微信公众平台天气预报功能开发
2014/07/06 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
“不能执行已释放的Script代码”错误的原因及解决办法
2007/09/09 Javascript
javascript事件问题
2009/09/05 Javascript
JSONP跨域的原理解析及其实现介绍
2014/03/22 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
AngularJS 与百度地图的结合实例
2016/10/20 Javascript
前端面试知识点锦集(JavaScript篇)
2016/12/28 Javascript
react.js 翻页插件实例代码
2017/01/19 Javascript
nodejs构建本地web测试服务器 如何解决访问静态资源问题
2017/07/14 NodeJs
jQuery实现的电子时钟效果完整示例
2018/04/28 jQuery
详解小程序rich-text对富文本支持方案
2018/11/28 Javascript
[57:37]EG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python反爬虫技术之防止IP地址被封杀的讲解
2019/01/09 Python
Python读取xlsx文件的实现方法
2019/07/04 Python
selenium 多窗口切换的实现(windows)
2020/01/18 Python
HTML5中的进度条progress元素简介及兼容性处理
2016/06/02 HTML / CSS
旅游管理专业大学生职业规划书
2014/02/27 职场文书
项目建议书怎么写
2014/05/15 职场文书
护理专业毕业生自荐书
2014/05/24 职场文书
淘宝店策划方案
2014/06/07 职场文书
职工小家建设活动方案
2014/08/25 职场文书
2014年学校党建工作总结
2014/11/11 职场文书
作文评语集锦
2014/12/25 职场文书
中国汉字听写大会观后感
2015/06/02 职场文书
PHP新手指南
2021/04/01 PHP
Python基础之元编程知识总结
2021/05/23 Python
MySQL批量更新不同表中的数据
2022/05/11 MySQL
华为HarmonyOS3.0强在哪? 看看鸿蒙3.0这7个小功能
2023/01/09 数码科技