es5和es6中var、let、const差异说明!

开始之前我们先来看看var、let、const它们到底属于谁?

es5申明变量方式:var

es6申明变量方法:let、const

差异说明:

1、是否会挂载再window上。

熟悉js的开发者都知道,当你用var定义了一个常量后,通过window.常量名是可以获取到常量值的。那么也就是说var定义的值会被挂载在window上。

var   a = 0;
let b = 1;
const c = 2;
console.log(a,window.a);//0 0
console.log(b,window.b);//1 undefined
console.log(b,window.b);//2 undefined

从上方示例可以得知,es6新增的定义常量的方法并不会被挂载在window上。

2、作用域差异

从官方给出的解释中const和let只在声明所在的块级作用域内有效。

if (true) {
var a = 0;
let b = 1;
const c = 2;
}
console.log(a) //0
console.log(b) //b is not defined
console.log(c) //c is not defined

示例中我们可以得出es6新增的只在块中可以正常找到,而离开块级区域则失效。

3、变量提升

console.log(a) //undefined  ===>   值已经被初始化,但还未赋值
var a = 0;
console.log(b) //Cannot access 'b' before initialization ===> 无法在初始化之前访问b
let b = 1;
console.log(c) //Cannot access 'c' before initialization ===> 无法在初始化之前访问c
const c = 2;

4、const命令注意点:

4.1、一旦声明必须赋值,不能使用null占位
4.2、声明后不能再修改
4.3、如果声明的是复合类型数据,可以修改其属性

4.1、一旦申明必须赋值,不能使用null占位

const c;
console.log(c) //Missing initializer in const declaration

4.2、申明后不能修改

const c = 2;
console.log(c) //2
c = 3;
console.log(c) //Assignment to constant variable

4.3、如果声明的是复合类型数据,可以修改其属性

const c = {name:"六月初"};
c.name = "六月初博客站"
console.log(c.name) //六月初博客站

总结可以得出:他们之间主要体现在作用域、挂载、变量提升这几方面。在实际应用中可能相对于const而言,let应用的相对多一点,而let的应用又主要集中在for循环区域块。试想一下在循环中我们常需要定义一个临时的变量,而这个变量我们仅仅需要它在当前区域块起作用,看到这里是不是感觉let仿佛就是为for循环量身打造的一般呢?

六月初字帖坊小程序 你想要的字帖模板及工具,这里都有!