面试的时候遇到的一道题:
1 | var a = 10 |
很明显这道题是对this
还有箭头函数的考察,箭头函数的this是在声明的时候绑定的,因此这里搞清楚this的指向就行了。
在非严格模式下,这里的this指向全局环境(browser中的window,node中的global);严格模式下,为undefined。
然后试了一把,在开头加上"use strict";
执行,原以为会报错,谁知道正常输出了10。。。wtf难道是严格模式没生效,在控制台source检查了 "use strict";
是在文件最开头。于是把var a = 10
改成a = 10
,执行报错ReferenceError: assignment to undeclared variable a
,看来严格模式是生效的。。。
继续做测试:
全文件严格模式:
1 | ; |
IIFE严格模式:
1 | (function () { |
看来之前理解的 严格模式下this指向undefined 并不严谨。看了下webpack打包出来的也是使用IIFE严格模式。
总结:全局的获取的this还是指向全局环境,非全局作用域内的this指向才是undefined。