# let与var区别
- let在块作用域中有效
- let不能重复声明
- let不会有变量提升
应用:循环遍历加监听
//问题的引出
var btns = document.getElementsByTagName('button');
for (var index = 0; index < btns.length; index++) {
var btn = btns[index];
btn.onclick = function(){
alert(index);
}
}
//这种情况三个按钮按下都显示3
//因为事件驱动机制,在执行回调函数时index是一个全局变量,这个变量此时已经执行过了for,index为3
//利用闭包技术
var btns = document.getElementsByTagName('button');
for (var index = 0; index < btns.length; index++) {
var btn = btns[index];
(function(i){
btn.onclick = function(){
alert(i);
}
})(index);
}
//利用let
var btns = document.getElementsByTagName('button');
for (let index = 0; index < btns.length; index++) {
var btn = btns[index];
btn.onclick = function(){
alert(index);
}
}
参考:https://www.cnblogs.com/yifeng555/p/8455414.html (opens new window)
# const
- 定义常量
- 不能修改
- 同let一样,也是块级作用域