let不会声明在window上
在ES5中我们使用var去声明一个变量,如果在全局作用域变量会被挂载在window全局变量上,如下
但是let是不会声明在window上的,因为ES6内不再有全局变量,ES6的语法中可以的弱化了全局变量
在同级作用域下let不会被重复声明,保证不会被误覆盖
在生产过程中,给变量起名是一件很麻烦的事情,如果生产周期很长,忘记了自己在之前的代码中已经使用过某个变量名,而又重新使用了这个变量名就会造成之前的变量被覆盖,产生让人摸不到头脑的错误
使用let就可以避免这种错误
在同级作用域中let不允许重复声明,否则会报错(变量my已经声明过了)
可以看这样一个问题
结果是undefined
产生这个问题的原因首先看fn()方法内,my变量不会提前声明,所以console.log的时候并不在fn()内并没有my变量,所以this会向上级作用域寻找my变量,上级作用域也就是window,而let并不会声明在window上,所以最后输出的是
undefined
领取专属 10元无门槛券
私享最新 技术干货