ES6-let,const解析
- 我们先看看ES5中var变量的缺点
- ES6-let 解析
- ES6-const解析
我们先看看ES5中var变量的缺点
- var会使变量提升(即下面声明的上面也可以使用)
console.log(a);
var a = 10;
- 变量可重复定义,也不会报错
var a = 10;
var a = 20;
- var声明的变量会挂载到window上,会使window上的方法失效
var name = 20;
console.log(window.name);
- 方法内的变量未经声明立即使用,也会挂载到window上
function print(){
a = 30;
}
ES6-let 解析
- let的优点 1.没有变量提升(即变量必须声明了才能使用)
console.log(a);//这里会报错,显示a未定义
let a = 20;
- 不能重复定义(重复声明会报错)
let a = 20;
let a = 30;//a is already delcare!
- 不会挂载到window上(不会影响到window上的方法)
let name = 20;
console.log(window.name);//undefined;
- 可以解决闭包的问题
此处形成了闭包,所以导致function拿到的i是同一个,所以每次打印的都是10
代码语言:javascript复制 var arr = [];
for(var i = 0; i < 10; i ){
arr.push(function(){
console.log(i);
})
}
arr[1]();//10
arr[2]();//10
解决方案:将var的变量i换成let声明的变量i
代码语言:javascript复制 var arr = [];
for(let i = 0; i < 10; i ){
arr.push(function(){
console.log(i);
})
}
arr[1]();//1
arr[2]();//2
- let的缺点
- 会导致临时死区(即外面声明了变量a,里面也声明了变量a,{}里面的a会使外面的a失效,此处的{}可以是函数{}即作用域)
let a = 10;
{
console.log(a);
let a = 20;
}
ES6-const解析
- const的用处:
- 定义常量,如果定义的常量被修改会报错此处指的会报错是常量未原始值
const A = 20;
A = 30;
1.如果定义的是引用值,则可以修改
代码语言:javascript复制 let obj = {
name: 'zhangsan'
}
const Role = obj;
Role.name = "lisi";
- const的其他特点和let相同,即不会变量提升,不会挂载到window, 不能重复声明,缺点也相同,也会造成临时死区