ES6与JS的关系
es6 是js的新一套表标准,已经于2015年6月正式发布。它的目标是使js可以编写复杂的大型应用程序,成为企业级开发语言。 由此可见ECMAScript 是为了JavaScript制定的一套规格标准。
新增的let命令与const命令
let命令
- let命令类似于var命令,两者的作用都是声明变量。区别在于var声明的变量都是作用在全局的变量(无论在哪生命都会默认提升),
- let声明的变量只作用于let所在的代码块中。(个人理解一个全局的变量,一个是当前作用域的变量)。
- let声明的变量制作用在当前的作用域不会影响它包含的作用域声明的相同变量。
例子
for(let i=0;i<3;i++){
let i = 'aaa'
console.log(i)
} // aaa aaa aaa 输出三次
复制代码
- let命令不存在变量提升,在什么作用域声明只有在声明这个变量之后才能使用这个变量。否则会报错
例子
console.log(a) //Uncaught ReferenceError: a is not defined
let a = 1
复制代码
- 只要在块级作用域中使用了let 命令声明变量,变量就会绑定当前的块级作用域不会受到外部声明的影响
例子
var test = 123
demoFunction = e=>{
test = 456
let test;
}
demoFunction() // Uncaught ReferenceError: test is not defined
//同样的会报错报这个变量没有被找到因为在变量赋值后声明的(会形成暂时性死区)
复制代码
- 在同一个作用域中不要重复的声明同一个变量会报错的
const命令
- const 命令用来声明一个只读的常量,常量的值是不能改变的。一旦改变常量的值就会报错 const声明的常量不能改变其值,这就意味着,const常量一旦声明之后就必须立即初始化。
例子
const aa = 123
aa = 456 //Uncaught TypeError: Assignment to constant variable.
const b //Uncaught SyntaxError: Missing initializer in const declaration
复制代码
- const命令与let命令相同都只是在声明所在的块级作用域中有效(在作用域外使用变量会报错与let的相同)
- const命令本质上是变量只想的那个内存地址不能被改动。对于符合类型数据(主要是对象和数组)而言, 变量指向的内存地址保存只是一个指针,const只能保证这个指针是固定的,(指针内的数据是可以操作改变的) 因此声明一个常量变量时要考虑清楚。
块级作用域
es6之前没有块级作用域只有全局作用域和函数作用域。这就导致了好多地方如果不注意的话变量会被新声明的 变量覆盖掉从而报错。
- es6中允许了在块级作用域中声明函数
- 函数声明类似于var,即声明函数后会将函数提升到全局作用域或函数作用域的头部(这些只在支持es6的浏览器中才会生效)
- es6中声明函数尽量写成函数表达式的形式
例子
{
let a =’ secret ’;
let f = function () {
return a ;
}
}
复制代码
(暂时不对块级作用域多做描述后面会更新对这些的理解)