ES6中新增了两个声明标识符let和const。
一、 let用来声明变量,作用域是代码块(就是{}括起来的部分);
1、使用let命令声明的变量在域解析的时候不会被提升
2、let在for循环中的使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ECMAScript</title>
</head>
<body>
<div>
<button>1</button>
<button>2</button>
<button>3</button>
<button>4</button>
<button>5</button>
</div>
<script>
//let在for循环中的使用
var btns=document.querySelectorAll('button');
/*for(var i=0;i<btns.length;i++){
btns[i].onclick=function () {
//for循环每次做的事只是向数组中存入一个函数,这个函数的功能是 打印 i,但是函数并没有立刻执行。
// 而这个i是通过var i 这句话来声明的。当for循环跑完,咱们都知道此时 i 的值是5。
console.log(i)//55555 每次执行结果都是5
}
}*/
//增加一个自身属性来解决(上面问题可以解决)
/*for(var i=0;i<btns.length;i++){
btns[i].idx=i;
btns[i].onclick=function () {
console.log(this.idx);//01234
}
}*/
//利用闭包的形式解决(问题可以解决)
/*for(var i=0;i<btns.length;i++){
(function (a) {
btns[i].onclick=function () {
console.log(a);
}
})(i);
}*/
//ES6 使用let解决(问题可以解决)
for(let i=0;i<btns.length;i++){
btns[i].onclick=function () {
console.log(i)//01234
}
}
//在循环语句之内是父作用域,在循环体内是自作用域
for(let i=0;i<3;i++){
let i=10;
console.log(i);//3次10
}
console.log(i)//出错
</script>
</body>
</html>
二、 const用来定义常量
const除了不能改变物理指针的特性,其他特性和let一样
数据一旦声明就不能改变了,否则就会报错。
当声明复杂类型的数据的时候,物理指针不可以改变,但可以改变起属性或增加新属性。