JavaScript Let
ECMAScript 2015
ES2015 引入了两个重要的 JavaScript 新关键词:let 和 const。
这两个关键字在 JavaScript 中提供了块作用域(Block Scope)变量(和常量)。
在 ES2015 之前,JavaScript 只有两种类型的作用域:全局作用域和函数作用域。
全局作用域
全局(在函数之外)声明的变量拥有全局作用域。
var carName = "porsche";
// 此处的代码可以使用 carName
function myFunction() {// 此处的代码也可以使用 carName
}
全局变量可以在 JavaScript 程序中的任何位置访问。
函数作用域
局部(函数内)声明的变量拥有函数作用域。
// 此处的代码不可以使用 carNamefunction myFunction() {var carName = "porsche";// code here CAN use carName
}
// 此处的代码不可以使用 carName
局部变量只能在它们被声明的函数内访问。
JavaScript 块作用域
通过 var 关键词声明的变量没有块作用域。
在块 {} 内声明的变量可以从块之外进行访问。
{ var x = 10;
}
// 此处可以使用 x
在 ES2015 之前,JavaScript 是没有块作用域的。
可以使用 let 关键词声明拥有块作用域的变量。
在块 {} 内声明的变量无法从块外访问:
{ let x = 10;
}
// 此处不可以使用 x
重新声明变量
使用 var 关键字重新声明变量会带来问题。
在块中重新声明变量也将重新声明块外的变量:
var x = 10;
// 此处 x 为 10
{ var x = 6;// 此处 x 为 6
}
// 此处 x 为 6
使用 let 关键字重新声明变量可以解决这个问题。
在块中重新声明变量不会重新声明块外的变量:
var x = 10;
// 此处 x 为 10
{ let x = 6;// 此处 x 为 6
}
// 此处 x 为 10
Internet Explorer 11 或更早的版本不完全支持 let 关键词。
下表定义了第一个完全支持 let 关键词的浏览器版本:
循环作用域
var i = 7;
for (var i = 0; i < 10; i++) {// 一些语句
}
// 此处,i 为 10
在循环中使用 let:
let i = 7;
for (let i = 0; i < 10; i++) {// 一些语句
}
// 此处 i 为 7
函数作用域
在函数内声明变量时,使用 var 和 let 很相似。
它们都有函数作用域:
function myFunction() {var carName = "porsche"; // 函数作用域
}
function myFunction() {let carName = "porsche"; // 函数作用域
}
全局作用域
如果在块外声明声明,那么 var 和 let 也很相似。
它们都拥有全局作用域:
HTML 中的全局变量
使用 JavaScript 的情况下,全局作用域是 JavaScript 环境。
在 HTML 中,全局作用域是 window 对象。
通过 var 关键词定义的全局变量属于 window 对象:
var carName = "porsche";
// 此处的代码可使用 window.carName
通过 let 关键词定义的全局变量不属于 window 对象:
let carName = "porsche";
// 此处的代码不可使用 window.carName
重新声明
允许在程序的任何位置使用 var 重新声明 JavaScript 变量:
var x = 10;// 现在,x 为 10var x = 6;// 现在,x 为 6
在相同的作用域,或在相同的块中,通过 let 重新声明一个 var 变量是不允许的:
var x = 10; // 允许
let x = 6; // 不允许
{var x = 10; // 允许let x = 6; // 不允许
}
在相同的作用域,或在相同的块中,通过 let 重新声明一个 let 变量是不允许的:
let x = 10; // 允许
let x = 6; // 不允许
{let x = 10; // 允许let x = 6; // 不允许
}
在相同的作用域,或在相同的块中,通过 var 重新声明一个 let 变量是不允许的:
let x = 10; // 允许
var x = 6; // 不允许
{let x = 10; // 允许var x = 6; // 不允许
}
在不同的作用域或块中,通过 let 重新声明变量是允许的:
let x = 6; // 允许
{let x = 7; // 允许
}
{let x = 8; // 允许
}
通过 var 声明的变量会提升到顶端。
您可以在声明变量之前就使用它:
// 在此处,您可以使用 carName
var carName;
通过 let 定义的变量不会被提升到顶端。
在声明 let 变量之前就使用它会导致 ReferenceError。
变量从块的开头一直处于“暂时死区”,直到声明为止:
// 在此处,您不可以使用 carName
let carName;
JavaScript Let相关推荐
- 【AJAX】JavaScript的面向对象
Ajax中后端数据返回后需要前端通过JavaScript来实现动态数据更新的问题.所以,在Ajax中加深了一遍JavaScript面向对象的印象. 基础部分: JavaScript中创建对象并简单对象 ...
- 【JavaScript总结】JavaScript语法基础:JS高级语法
作用域链: 1.JS中只有函数能够限定作用域的范围: 2.变量处理在制定的函数范围内,还有一个特殊的作用域,就是没有用var 声明的全局作用域 3.js中的作用域链是为了清晰的表示出所有变量的作用范围 ...
- 【JavaScript总结】JavaScript语法基础:DOM
->DOM的理解:文档对应dom树 ->有了DOM能做什么:DOM的操作 html文档做为DOM树模型,DOM树的节点就是对象.对象会触发事件来执行一些事件代码. C#中的事件是一个委托变 ...
- 【JavaScript总结】JavaScript语法基础:JS编码
运算符 数学:+. -. *. / 逻辑:>. < .>= .<=. == . !=.&&.|| . === .!==(完全等于) 对象相关 new delet ...
- 【JavaScript总结】JavaScript语法基础:数据类型
------>数据类型有哪些? ->基本类型:数字类型,布尔类型,字符串类型 ->引用类型:对象类型,函数类型 ->空类型:null 和 undefined ->运算符: ...
- 【JavaScript总结】JavaScript发展与学习内容
发展: 最初浏览器是为大学里浏览文档用,从地址栏输入文档地址,找到文档显示. 后来各种需求(购物网站,个人博客)出现,已有功能不能满足需求. 可人们依旧在努力满足这种需求,但实现后的效果很不尽人意. ...
- Python:模拟登录、点击和执行 JavaScript 语句案例
案例一:网站模拟登录 # douban.pyfrom selenium import webdriver from selenium.webdriver.common.keys import Keys ...
- [JavaScript] JavaScript数组挖掘,不只是讲数组哟(2)
课程来源:后盾人 上一篇的内容:[JavaScript] JavaScript数组挖掘,不只是讲数组哟 数组引用类型分析,多维数组,用Array.of为数组创建细节,类型检测与转换,在一个数组后面加一 ...
- [JavaScript] JavaScript 数组挖掘,不只是讲数组哟
课程来源:后盾人 数组引用类型分析 数组的定义 const array = new Array('hello', 'dust', 1, 2, 3, 4, 5) console.log(array) l ...
- linux下用js生成xml,js2xml:将javascript字符串转换为xml
有时候爬数据遇到像下面这种,数据在script标签中以javascript形式存在. var totalReviewsValue = 32; var averageRating = 4.5; if(t ...
最新文章
- 批量按照文件大小排序并修改文件名
- 盘点11个面向文档的开源NoSQL数据库
- fpga初始化错误_一种SRAM型FPGA单粒子效应加固平台设计
- 7.Java中变量的隐式转换以及强类型转换
- Android内部存储与外部存储解析
- WinForm 修改App.config不起作用(但是调试没有异常)
- php图片居中在div,css如何实现图片在div中垂直居中
- data mining 1 concept
- 协同过滤之ALS-WR算法
- codevs1026 逃跑的拉尔夫
- TabLyout结合ViewPage
- 博弈:唯冠和苹果的iPad商标案之争
- 实验物理与工业控制系统---EPICS
- 蓝牙耳机哪个品牌经济实惠?价格便宜音质好的蓝牙耳机推荐
- 慈爱的教育部门被误解了 --- 真正减负令的实施方案探讨
- Ubuntu使用日常
- 基于rnn的语音降噪matlab,基于RNN的音频降噪算法 (附完整C代码)
- 慢慢欣赏linux qemu编译和启动
- dayjs 日常使用
- 荣耀畅玩7X安装鸿蒙系统,华为荣耀畅玩7X EMUI8.0回退到EMUI5.0教程(安卓8.0降级7.0)...
热门文章
- 我在鹅厂,拿到满星绩效!
- 反射的基础应用——反射+注解模拟测试框架(Junit)
- 湖北科技学院计算机院导师简介,许光宇 硕士生导师介绍
- 学习使用turtlebot2——调试Hokuyo激光雷达(型号UST-10LX)
- android 创建新活动,Android基础Activity篇——创建一个活动(Activity)
- goautodial 4.0使用AppKonference替代 app_meetme
- 调试 configure
- h265、h264的RTP包封装区别
- tkinter库绘图实例14:利用鼠标控制图形放大和缩小效果
- 用GNU Cash管理帐目