let声明

时间:2023-03-09 16:19:52
let声明
 <script>
/**
* es6 let 练习
* 生效范围:块级代码代码内。
*/
// {
// let a=2;
// var c=2;
// }
// console.log(c);//全局变量
// console.log(a);//undefined
// for循环内适用let 变量作用范围只在for循环体内
// for(let i=0;i<2;i++){
// console.log(i)
// }
// console.log(i);//undefined
//在for循环里 let变量 保存当时的值 不同于var
let arr=[];
for(let i=;i<;i++){
arr[i]= ()=>{
console.log(i);
}
}
arr[]();//
arr[]();//
let arrvar=[];
for(var i=;i<;i++){
arrvar[i]=()=>{
console.log(i)
}
}
arr[]();//都是0
arr[]();//
/**
* 1、在for循环中,let声明的变量都是新的变量,都在本轮有效,在新一轮都是新的值。在每次循环中js引擎都会记录上一次的变量值,以便计算本轮的值。
*
* @type {NodeListOf<HTMLElementTagNameMap[string]>}
*/
let btns=document.querySelectorAll("button");
for(let i=;i<btns.length;i++){
btns[i].addEventListener('click',ev => {//注意let声明的i是每次循环的i都是新的变量。所有在事件触发的时候i的值 是当时循环的值。而不是最后的值。
alert(i);
})
}
let divs=document.querySelectorAll("div");
for(var i=;i<divs.length;i++){
divs[i].addEventListener('click',ev => {//需要注意 在调用事件函数的的i已经是divs.lenth的值。因为此时i已经不满足循环条件
alert(i);
})
}
/**
* 1、在循环变量中是父作用域而下面的块级标签是子作用域。
*/
for(let i=;i<;i++){
let i='cc';//注意此时的是重新声明i变量!
console.log(i);
}
/**
* var声明的变量都是都有变量提升的,在调用未声明(var)的变量的时候,为undefined
* let 不存在声明变量提升,在调用未声明的变量的时候,会报错
*/
console.log(k);
var k;
console.log(m);
let m=;
</script>