1.var具有变量提升, 而let没有
function sayHi() {
console.log(name)
console.log(age)
var name = 'Lydia'
let age = 21
}
输出undefine, 报错(未定义直接使用)
2.输出是什么?
for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 1)
}
for (let i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 1)
}
在js的事件循环机制中,setTimeout是宏任务,会在同步代码(for)之后执行。因此第一个循环中由于var具有变量提升,在执行到setTimeout时已经变成了333。而第二个循环中,let会形成一个块级作用域,因此是0 1 2
3.for-in遍历的是键,但是for-of遍历的是值