8

我发现了一个有趣的案例,其中“使用严格”在 javascript 中没有按预期工作。以下功能

"use strict";

var y = () => {
    console.log(this);
}

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

x(); // undefined due to use strict
y(); // window object

我认为胖箭头上下文也应该被 undefined 覆盖,还是我的假设是错误的?

4

1 回答 1

11

MDN 谈到箭头函数

与严格模式的关系

鉴于这this是词法,关于的严格模式规则将this被忽略。

var f = () => {'use strict'; return this};
f() === window; // or the global object

词法规则this优先于严格模式this规则。

我们可以在 ES2015 规范中通过检查函数[[ThisMode]]slot的可能值的简单英语描述轻松地看到这一点,它可以是lexicalstrictglobal

定义如何this在函数的形式参数和代码体中解释引用。lexical表示thisthis的是词法封闭函数的值。strict表示该this值完全按照函数调用所提供的方式使用。global表示 的thisundefined被解释为对全局对象的引用。

换句话说,函数的this行为可以是严格的、非严格的或词法的。如果一个函数[[ThisMode]]是词法的(就像箭头函数一样),它会使函数的严格/非严格状态与确定this-setting 行为的目的无关。

于 2016-04-05T13:36:40.697 回答