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相关推荐

  1. 【AJAX】JavaScript的面向对象

    Ajax中后端数据返回后需要前端通过JavaScript来实现动态数据更新的问题.所以,在Ajax中加深了一遍JavaScript面向对象的印象. 基础部分: JavaScript中创建对象并简单对象 ...

  2. 【JavaScript总结】JavaScript语法基础:JS高级语法

    作用域链: 1.JS中只有函数能够限定作用域的范围: 2.变量处理在制定的函数范围内,还有一个特殊的作用域,就是没有用var 声明的全局作用域 3.js中的作用域链是为了清晰的表示出所有变量的作用范围 ...

  3. 【JavaScript总结】JavaScript语法基础:DOM

    ->DOM的理解:文档对应dom树 ->有了DOM能做什么:DOM的操作 html文档做为DOM树模型,DOM树的节点就是对象.对象会触发事件来执行一些事件代码. C#中的事件是一个委托变 ...

  4. 【JavaScript总结】JavaScript语法基础:JS编码

    运算符 数学:+. -. *. / 逻辑:>. < .>= .<=. == . !=.&&.|| . === .!==(完全等于) 对象相关 new delet ...

  5. 【JavaScript总结】JavaScript语法基础:数据类型

    ------>数据类型有哪些? ->基本类型:数字类型,布尔类型,字符串类型 ->引用类型:对象类型,函数类型 ->空类型:null 和 undefined ->运算符: ...

  6. 【JavaScript总结】JavaScript发展与学习内容

    发展: 最初浏览器是为大学里浏览文档用,从地址栏输入文档地址,找到文档显示. 后来各种需求(购物网站,个人博客)出现,已有功能不能满足需求. 可人们依旧在努力满足这种需求,但实现后的效果很不尽人意. ...

  7. Python:模拟登录、点击和执行 JavaScript 语句案例

    案例一:网站模拟登录 # douban.pyfrom selenium import webdriver from selenium.webdriver.common.keys import Keys ...

  8. [JavaScript] JavaScript数组挖掘,不只是讲数组哟(2)

    课程来源:后盾人 上一篇的内容:[JavaScript] JavaScript数组挖掘,不只是讲数组哟 数组引用类型分析,多维数组,用Array.of为数组创建细节,类型检测与转换,在一个数组后面加一 ...

  9. [JavaScript] JavaScript 数组挖掘,不只是讲数组哟

    课程来源:后盾人 数组引用类型分析 数组的定义 const array = new Array('hello', 'dust', 1, 2, 3, 4, 5) console.log(array) l ...

  10. linux下用js生成xml,js2xml:将javascript字符串转换为xml

    有时候爬数据遇到像下面这种,数据在script标签中以javascript形式存在. var totalReviewsValue = 32; var averageRating = 4.5; if(t ...

最新文章

  1. 批量按照文件大小排序并修改文件名
  2. 盘点11个面向文档的开源NoSQL数据库
  3. fpga初始化错误_一种SRAM型FPGA单粒子效应加固平台设计
  4. 7.Java中变量的隐式转换以及强类型转换
  5. Android内部存储与外部存储解析
  6. WinForm 修改App.config不起作用(但是调试没有异常)
  7. php图片居中在div,css如何实现图片在div中垂直居中
  8. data mining 1 concept
  9. 协同过滤之ALS-WR算法
  10. codevs1026 逃跑的拉尔夫
  11. TabLyout结合ViewPage
  12. 博弈:唯冠和苹果的iPad商标案之争
  13. 实验物理与工业控制系统---EPICS
  14. 蓝牙耳机哪个品牌经济实惠?价格便宜音质好的蓝牙耳机推荐
  15. 慈爱的教育部门被误解了 --- 真正减负令的实施方案探讨
  16. Ubuntu使用日常
  17. 基于rnn的语音降噪matlab,基于RNN的音频降噪算法 (附完整C代码)
  18. 慢慢欣赏linux qemu编译和启动
  19. dayjs 日常使用
  20. 荣耀畅玩7X安装鸿蒙系统,华为荣耀畅玩7X EMUI8.0回退到EMUI5.0教程(安卓8.0降级7.0)...

热门文章

  1. 我在鹅厂,拿到满星绩效!
  2. 反射的基础应用——反射+注解模拟测试框架(Junit)
  3. 湖北科技学院计算机院导师简介,许光宇 硕士生导师介绍
  4. 学习使用turtlebot2——调试Hokuyo激光雷达(型号UST-10LX)
  5. android 创建新活动,Android基础Activity篇——创建一个活动(Activity)
  6. goautodial 4.0使用AppKonference替代 app_meetme
  7. 调试 configure
  8. h265、h264的RTP包封装区别
  9. tkinter库绘图实例14:利用鼠标控制图形放大和缩小效果
  10. 用GNU Cash管理帐目