我发现了一个有趣的案例,其中"使用严格的"在JavaScript中没有按预期工作。 以下功能
"use strict";
var y = () => {
console.log(this);
}
var x = function () {
console.log(this);
}
x(); // undefined due to use strict
y(); // window object
我认为胖箭头上下文也应该被未定义覆盖,或者我的假设是错误的?
答案 0 :(得分:9)
MDN说arrow functions:
与严格模式的关系
鉴于
this
是词法,关于this
的严格模式规则将被忽略。var f = () => {'use strict'; return this}; f() === window; // or the global object
词汇this
的规则优先于严格模式this
规则。
我们可以在ES2015规范中通过检查a function's [[ThisMode]]
slot的可能值的简明英语描述轻松地看到这一点,lexical
,strict
或global
:
定义如何在函数的形式参数和代码体内解释
this
引用。lexical
表示this
引用词法封闭函数的this
值。strict
表示完全按照函数调用的方式使用this
值。global
表示this
undefined
值被解释为对全局对象的引用。
换句话说,函数的this
行为可以是严格的,非严格的,也可以是词汇的。如果函数[[ThisMode]]
是词法(就像箭头函数一样),它会使函数的严格/非严格状态与确定this
无关 - 设定行为。