let声明变量的作用域问题

有这么一个情况:

看起来很简单,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对象的属性,也不会有变量提升。

你可能感兴趣的:(let声明变量的作用域问题)