为什么ES6 IIFE和ES5 IIFE的执行环境不同?

时间:2016-07-23 07:47:42

标签: javascript ecmascript-6 iife executioncontext

关于总结问题的标题 - 这是代码示例:

!function() {
    console.log(this); // global object
}();

(function() {
    console.log(this); // global object
})();

() => {
    console.log(this); // {}
}();

var x = (function() {
    console.log(this); // global object
})();

箭头功能背后发生了什么?如果我想在ES5中使用该范围,据我所知,我必须将执行绑定到一个空对象,如下所示:

!function() {
    console.log(this); // global object
}.bind({})();

1 个答案:

答案 0 :(得分:5)

它与ES5或ES6无关,箭头函数总是获得封闭函数的上下文。不使用'use strict';的函数调用总是将全局对象作为上下文(例如浏览器中的窗口),使用时,默认情况下上下文为undefined

这是一篇非常好的文章,解释了这个主题:

https://rainsoft.io/gentle-explanation-of-this-in-javascript/