为什么 ES6 IIFE 和 ES5 IIFE 的执行上下文不同?
Why is the execution context of ES6 IIFEs and ES5 IIFEs different?
标题总结了问题 - 这是代码示例:
!function() {
console.log(this); // global object
}();
(function() {
console.log(this); // global object
})();
() => {
console.log(this); // {}
}();
var x = (function() {
console.log(this); // global object
})();
箭头函数的幕后发生了什么?如果我想在 ES5 中使用该范围,据我所知,我必须将执行绑定到一个空的 object,如下所示:
!function() {
console.log(this); // global object
}.bind({})();
这与 ES5 或 ES6 无关,箭头函数总是获取封闭函数的上下文。不使用 'use strict';
的函数调用总是获取全局对象作为上下文(例如浏览器中的 window),使用时,上下文默认为 undefined
。
这是一篇解释主题的非常好的文章:
https://rainsoft.io/gentle-explanation-of-this-in-javascript/
标题总结了问题 - 这是代码示例:
!function() {
console.log(this); // global object
}();
(function() {
console.log(this); // global object
})();
() => {
console.log(this); // {}
}();
var x = (function() {
console.log(this); // global object
})();
箭头函数的幕后发生了什么?如果我想在 ES5 中使用该范围,据我所知,我必须将执行绑定到一个空的 object,如下所示:
!function() {
console.log(this); // global object
}.bind({})();
这与 ES5 或 ES6 无关,箭头函数总是获取封闭函数的上下文。不使用 'use strict';
的函数调用总是获取全局对象作为上下文(例如浏览器中的 window),使用时,上下文默认为 undefined
。
这是一篇解释主题的非常好的文章:
https://rainsoft.io/gentle-explanation-of-this-in-javascript/