let关键字用来声明变量,let声明变量的特点:
1.不允许重复声明变量
2.块级作用域(局部变量)
3.不存在变量提升
4.不影响作用域链
区别:
1.var可以重复声明变量,如果用let重复声明变量会报错
2.var存在变量提升:就是在变量创建之前使用(输出的是undefined)
而let不存在变量提升。
示例:修改元素的背景颜色:
for
(var
i
=
0
;
i
<
items
.
length
;
i
++
) {
items
[
i
].
onclick
=
function
() {
items
[
i
].
style
.
background
=
'pink'
;
}
当用var声明变量时,用上述方法改变背景颜色时会报错,但用let声明i就不会报错。
应为var是全局变量,经过循环之后下标变成了3,超过了数组的长度就会报错
我们要明白的是当我们点击的时候,这个i是哪个值,
使用var相当于是:
{ var i = 0; }
{ var i = 1; }
{ var i = 2; }
{ var i = 3; }
i=3把前面的覆盖掉。
而let是局部变量,
使用let相当于是:
{ let i = 0; }
{ let i = 1; }
{ let i = 2; }
{ let i = 3; }
由于let声明的是局部变量,每一个保持着原来的值 ,点击事件调用的时候拿到的是对应的i。