- A+
提前声明:此文章仅仅用于个人成长学习的记录。
内容部分摘抄自:
一:https://github.com/qianguyihao/Web/tree/master/05-JavaScript%E4%B9%8BES6%E8%AF%AD%E6%B3%95
二:阮一峰 | ECMAScript 6 入门。
三:https://segmentfault.com/a/1190000020678240
ES6 的变量声明
1:var、let 、const用来声明变量。
1.1:var,定义全局变量( var 是 variable 的简写)。
1.2: let,定义局部变量,替代 var。
1.3: const,定义常量(定义后,不可修改)。
2:作用域:
2.1:全局作用域
· 2.1.1:var在全局作用域中定义后自动赋值给window,可以使用`window.“”` 来获取出来,容易污染数据
2.2:函数作用域 function() {}
2.3:块级作用域 {}
3:let 和 const 的特点【重要】
3.0:赋值使用
const命令
声明常量后必须立马赋值
let命令
声明变量后可立马赋值或使用时赋值
3.1:支持块级作用域
3.2:不存在变量提升
解释:和暂时性死区有共同特定,变量不存在变量提升,都是需要先声明再使用
3.3:禁止重复声明
解释:在同一作用域中重复声明同一变量
3.4:暂时性死区
解释: 使用 let/const 声明的变量,会使区块形成封闭的作用域。若在声明之前使用变量,就会报错。
const name = 'qianguyihao'; function foo() { console.log(name); const name = 'hello'; } foo(); // 执行函数后,控制台报错:Uncaught ReferenceError: Cannot access 'name' before initialization
/**
* 一共说明两个问题:
* 1:变量“name”在函数foo外部定义了的,在函数内部重新定义一个同名的“name”变量。函数会形成一个封闭的作用域,唯一的变量为函数内部中的“name”变量。如果没有在foo函数中再次定义“name”变量就不会报错了
* 2:这个不是重复声明变量,他们在不同的作用域中
*
*/
相反"var"声明:存在变量提升、可以重复声明、不支持块级作用域