对于let与var的区别
- let有块级作用域
- let存在暂时性死区
- let不能变量提升
今天刷面试题的时候,遇到一个面试题,又对let有了重新的认识,补充了let的知识点,下面看面试题
let a = 'w'
let obj = {
a: 'o',
print: function () {
console.log(this.a)
}
}
let p = obj.print;
obj.print(); //o
p() //undefined
//this.a 是去window里面寻找a,用let 定义a时 不会把a放进window 用var定义时 会把a放进window
这道题对第一个输出可能没啥疑问,但第二个输出可能有人会问为什么不是输出w,这是因为用let声明的变量不会放到window中去,所以在使用this.a时,事迹上是拿不到a的值的,因为此时window中并没有a这个值,如果你有var就能在window中拿到a,因为a会被放到window中去。
用let在全局作用域中定义变量时,变量不会被放到window对象中,如果用var在全局作用域中定义变量,变量则会被放到window对象中。