let
1.作用
* 与var类似,用来声明一个变量
2.特点
* 在块作用域内有效
* 不能重复声明
* 不会预处理 不存在变量提升
3.应用
* 循环遍历加监听
* 使用let取代var是趋势
const
1.作用
* 定义一个常量
2.特点
* 不能修改
* 其他特定同let
3.应用
* 保存不用改变的数据
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>let和const</title>
</head>
<body>
<button type="">测试1</button>
<button type="">测试2</button>
<button type="">测试3</button>
</body>
<script type="text/javascript">
let btns = document.getElementsByTagName('button')
for(var i = 0;i < btns.length;i++){
var btn = btns[i]
btn.onclick = function(){
alert(i)// 每次都是3 因为回调函数会放在事件队列里边 最后执行
}
}
// 解决方法
for(var i = 0;i < btns.length;i++){
var btn = btns[i];
(function(i){
btn.onclick = function(){
alert(i)// 这个时候就正常了 是因为闭包是一个私有作用域 每次传进来的i都会自执行
}
})(i);
}
// 使用let
for(let i = 0;i < btns.length;i++){
var btn = btns[i]
btn.onclick = function(){
alert(i)
}
}
</script>
</html>
const就不做演示了!!