javascript - 为什么 ES6 IIFE 和 ES5 IIFE 的执行上下文不同?

标签 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 中使用该作用域,据我所知,我必须将执行绑定(bind)到一个空对象,如下所示:

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

最佳答案

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

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

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

关于javascript - 为什么 ES6 IIFE 和 ES5 IIFE 的执行上下文不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38539464/

相关文章:

javascript - 粘性导航栏功能

php - javascript 函数在 php echo 中工作吗?

javascript - 无法访问或使用Node的fs模块

javascript - 我可以在 react 组件的构造函数中使用箭头函数吗?

javascript - 抛出函数是否符合 ES5/ES6 标准?

namespaces - 在 ES6 中使用 IIFE 命名空间?

javascript - 如何将子链接绑定(bind)到其父容器

javascript - 为什么这种 JS 函数风格无法检索所需的数据

javascript - 如何将对象数组转换为对象列表

javascript - 为什么需要将立即调用的函数表达式 IIFE 包装在括号 JavaScript 中