let声明变量的作用域问题
2020-05-27 本文已影响0人
CCCCCccccccch
有这么一个情况:
看起来很简单,fn里的this是指向window的,但实际上打印输出结果是undefined,为什么会出现这种情况,因为ES6与ES5在声明变量方便有差异。
1、ES5声明变量只有两种方式:var和function。
2、ES6有let、const、import、class再加上ES5的var、function共有六种声明变量的方式。
3、浏览器环境中顶层对象是window,Node中是global对象。
4、ES5中,顶层对象的属性等价于全局变量。
5、ES6中有所改变:var、function声明的全局变量,依然是顶层对象的属性,会挂载到window上。let、const、class声明的全局变量不再属于顶层对象的属性,全局变量和顶层对象的属性开始分离、脱钩。所以上面let声明的变量不是window对象的属性,也不会有变量提升。