es6
es6是为了解决es5语法的缺点新天加的语法。
let与const的特点
遵循块级作用域。只在块级作用域起作用。
注意点
let
- 不能变量提升
console.log(i);//undefined 变量提升
var i = 0;
console.log(msg);//报错 变量不能提升
let msg = 1;
- 不能重复申明变量
var i = 1;
var i = 10;
console.log(i); // 10 覆盖
let msg = 1;
let msg = 2;//解析的时候就报错 ,msg已经申明过来
console.log(msg);
const
- 不能变量提升
- 不能重复申明变量
- 初始化值不能改变(绑定不能改变,内存地址指向)
// 常量不能更改 绑定不能改变 内存地址指向
const age = 10;
age = 20;//报错 常量不能改变
const person = {
name: 'cc',
age: 26
}
person.like = 'code';
- 申明变量必须有初始化值
const age;//报错 申明常量没有初始化值
块级作用的特点
- 暂时性死区TDZ
let i = 0;
{
console.log(i);//报错 不会打野i = 0;1.因为在块级作用域内声明的变量在这个作用域内都是起作用的,
//2保留var 的函数作用域的变量提升。.
let i = 1;
}
- 循环中的
//循环中使用let与const
var arr = [];
for(var i = 0; i < 10; i++){
(function(j){
arr.push(function(){
console.log(j);
})
})(i)
}
arr.forEach(function(value, index, array){
value();
})
//对比
var arr = [];
for(let i = 0; i < 10 ; i++ ){
arr.push(function(){
console.log(i);
})
}
arr.forEach(function(value, index, arr){
value();
})