在javascript中使用严格不适用于胖箭头?

gor*_*i93 7 javascript use-strict ecmascript-6

我发现了一个有趣的案例,其中"use strict"在javascript中无法正常工作.以下功能

"use strict";

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

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

x(); // undefined due to use strict
y(); // window object
Run Code Online (Sandbox Code Playgroud)

我认为胖箭头上下文也应该被未定义覆盖,或者我的假设错了?

aps*_*ers 9

MDN说箭头功能:

与严格模式的关系

鉴于这this是词汇,严格的模式规则this被忽略了.

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

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

我们可以通过检查可能值的纯英文说明在ES2015规范很容易看到这个功能的[[ThisMode]]插槽,它可以是lexical,strictglobal:

定义如何this在函数的形式参数和代码体内解释引用.lexical意味着thisthis的是词汇封闭函数的值.strict表示this完全按函数调用提供的值使用该值.global表示将thisundefined解释为对全局对象的引用.

换句话说,函数的this行为可以是严格的,非严格的,也可以是词法的.如果函数[[ThisMode]]是词法(就像箭头函数一样),它会使函数的严格/非严格状态与确定this设置行为无关.