//**************************************************
//1、使用let声明的变量,所声明的变量只在命令所在的代码块中有效。
/*
{
let a = 1;
var b = 2;
//console.log(a)//1
}
*/
//console.log(a) //报错
//console.log(b) //2
//**************************************************
//2、使用let声明的变量在预解析的时候 不会提前解析(不会被提升)
/*
//console.log(a) //undefined (因为js会提前预解析,为a变量赋一个undefined的值)
//var a = 1;
console.log(b) //报错
let b = 2;
*/
//**************************************************
//3、let不允许在同一个作用域下声明已经存在的变量
//var a = 1;
//let a = 2; //报错。重复性声明
//let b = 1;
//let b = 2; //报错。重复性声明
//**************************************************
// let for循环
var btn = document.querySelectorAll('button');
for (var i = 0; i < btn.length; i++) {
btn[i].onclick = function(){
console.log(i); // 每次都是4
}
};
for (var i = 0; i < btn.length; i++) {
btn[i].index = i;
btn[i].onclick = function(){
console.log(this.index); //自定义属性 01234
}
};
for (var i = 0; i < btn.length; i++) {
(function(i){
btn[i].onclick = function(){
console.log(i); //闭包 01234
}
})(i)
};
for (let i = 0; i < btn.length; i++) {
btn[i].onclick = function(){
console.log(i); //使用let 声明 i 01234 不需要加自定义属性 不用闭包
}
};