了解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 09 Javascript
javascript+mapbar实现地图定位
Apr 09 Javascript
Jquery实现网页跳转或用命令打开指定网页的解决方法
Jul 09 Javascript
javascript新闻跑马灯实例代码
Jul 29 Javascript
js判断文件格式及大小的简单实例(必看)
Oct 11 Javascript
使用JavaScript获取URL中的参数(两种方法)
Nov 16 Javascript
从零学习node.js之简易的网络爬虫(四)
Feb 22 Javascript
详解关于react-redux中的connect用法介绍及原理解析
Sep 11 Javascript
Vue.JS项目中5个经典Vuex插件
Nov 28 Javascript
微信小程序前端promise封装代码实例
Aug 24 Javascript
vue路由守卫及路由守卫无限循环问题详析
Sep 05 Javascript
详解JavaScript原型与原型链
Nov 16 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与SQL注入攻击[二]
2007/04/17 PHP
用PHP解决的一个栈的面试题
2014/07/02 PHP
js代码实现微博导航栏
2015/07/30 PHP
实例分析10个PHP常见安全问题
2019/07/09 PHP
仿谷歌主页js动画效果实现代码
2013/07/14 Javascript
javascript获取url上某个参数的方法
2013/11/08 Javascript
javascript读取xml实现javascript分页
2013/12/13 Javascript
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
Javascript编写俄罗斯方块思路及实例
2015/07/07 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
JavaScript每天必学之事件
2016/09/18 Javascript
JS中split()用法(将字符串按指定符号分割成数组)
2016/10/24 Javascript
微信小程序 使用picker封装省市区三级联动实例代码
2016/10/28 Javascript
JS中with的替代方法与String中的正则方法详解
2016/12/23 Javascript
js中的触发事件对象event.srcElement与event.target详解
2017/03/15 Javascript
浅谈ajax请求不同页面的微信JSSDK问题
2018/02/26 Javascript
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
[02:20]DOTA2亚洲邀请赛 IG战队出场宣传片
2015/02/07 DOTA
在python中的socket模块使用代理实例
2014/05/29 Python
python中__call__内置函数用法实例
2015/06/04 Python
详解Python if-elif-else知识点
2018/06/11 Python
Django 中自定义 Admin 样式与功能的实现方法
2019/07/04 Python
Python PO设计模式的具体使用
2019/08/16 Python
PyTorch的SoftMax交叉熵损失和梯度用法
2020/01/15 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
通过实例简单了解Python sys.argv[]使用方法
2020/08/04 Python
基于CSS3实现图片模糊过滤效果
2015/11/19 HTML / CSS
后勤工作职责
2013/12/22 职场文书
公司培训欢迎词
2014/01/10 职场文书
2014年母亲节寄语
2014/05/07 职场文书
升学宴学生答谢词
2015/01/05 职场文书
工作年限证明模板
2015/06/15 职场文书
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
2021/06/11 Python
MongoDB安装使用并实现Python操作数据库
2021/06/28 MongoDB