一、ES6块级作用域

let 声明

块级声明用于声明在指定作用域之外无法访问的变量,存在于:

①函数内部

②块内(字符{和}之间的区域)

禁止重声明

(1)如果在作用域由已经存在某个标识,再用let声明时会报错

var name = 'zhang'
let name = 'wang' // 报错

(2)如果在当前作用域内嵌另一个作用域,使可在内嵌的作用域中用let声明同名变量,代码如下:

var name = 'zhang'
if(status){
let name = 'wang' // 不会报错
}

const 声明

声明的是常量,一旦被设定后不可更改,所以,每个通过const声明的常量必须进行初始化。

正确:const name = 'zhang';

错误:const name;

const 与 let

相同之处:都是块级标识符,只在当前代码块内有效,不会提升至作用域顶部。

不同之处:无论在严格模式下还是非严格模式下,都不可以为const 定义的常量再赋值,否则会报错。

用const 声明对象

const 声明不允许修改绑定,但允许修改值,也就是说,用const声明对象后,可以修改该对象的属性值,代码如下:

const person = { name : 'zhang' };
// 可以修改对象属性的值 person.name = 'wang'
// 报错 person = { name:'wang' }

临时死区

let和const与var不同,声明的变量不会被提升到作用域的顶部,不可在声明之前访问这些变量。

if(status){
console.log(typeof value);
let value = "blue";
}
// 此时的console.log()会报错,此时的value还位于“临时死区”或TDZ中。

全局块作用域绑定

let和const与var的另一个区别是它们在全局作用域中的行为,当var被用于全局作用域时,会创建一个新的全局变量作为全局对象(浏览器环境中的window对象)的属性。var 声明的变量会无意中覆盖一个已经存在的全局属性。代码如下:

var RegExp = 'Hello'
console.log(window.RegExp) // Hello (覆盖)

块级绑定最佳实践

默认使用const,只在确定需要改变变量的值时使用let,这样就可以在某种程度上实现代码的不可变。防止某些错误的产生。

最新文章

  1. java 执行jar指定log4j.properties文件位置
  2. char.js
  3. HashMap,LinkedHashMap,TreeMap的区别
  4. BZOJ树链剖分题目汇总
  5. 【原】sql 将某列拼成一个字符串
  6. SharePoint 2010 自定义 字段 类型--------省市区联动
  7. IIS7.5 asp+access数据库连接失败处理 64位系统
  8. crm使用soap创建下拉框
  9. Vim 基本配置和经常使用的命令
  10. 【Java学习笔记之三十】详解Java单例(Singleton)模式
  11. dbus-launch
  12. vue2.x 给一个对象里添加一个没有的属性
  13. Python学习日记 --day4
  14. RDLC系列之一 简介和入门
  15. Android 开发 框架系列 百度语音合成
  16. Android学习之基础知识四-Activity活动5讲(Activity的生命周期)
  17. 当图片加载失败时更换图片, Firefox onerror 报错
  18. Noip数学整理
  19. 跳出python的各种坑(1)
  20. 反编译示例:mxd检查

热门文章

  1. SpringBoot&MyBatisPlus
  2. 「浙江理工大学ACM入队200题系列」问题 J: 零基础学C/C++83——宁宁的奥数路
  3. MySQL遇到的坑:sql_mode=only_full_group_by不兼容
  4. pyinstaller 打包多个资源文件到一个可执行文件
  5. 【SQL必知必会】SQL知识查缺补漏
  6. 【每日一题】【DFS&每个点都调用一次前后左右】由1连接的岛屿数量-211031/220216
  7. 12V转5V降压芯片,12V转3.3V稳压芯片电路图
  8. Dijkstra 算法说明与实现
  9. 《HTTP权威指南》– 2.HTTP报文与URL资源
  10. Mattermost 笔记