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

Zac*_*ith 2 javascript iife executioncontext ecmascript-6

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

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

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

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

var x = (function() {
    console.log(this); // global object
})();
Run Code Online (Sandbox Code Playgroud)

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

!function() {
    console.log(this); // global object
}.bind({})();
Run Code Online (Sandbox Code Playgroud)

cst*_*sik 5

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

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

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