在javascript中使用strict不适用于胖箭头?
我发现了一个有趣的例子,在javascript中,“使用严格”并没有像预期的那样工作。 以下功能在javascript中使用strict不适用于胖箭头?,javascript,ecmascript-6,use-strict,Javascript,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 我认为胖箭头上下文也应该被未定义的内容覆盖,还是我的假设是错误的?M
"use strict";
var y = () => {
console.log(this);
}
var x = function () {
console.log(this);
}
x(); // undefined due to use strict
y(); // window object
我认为胖箭头上下文也应该被未定义的内容覆盖,还是我的假设是错误的?MDN说:
与严格模式的关系
鉴于此
是词法性的,因此忽略了与此
相关的严格模式规则
var f = () => {'use strict'; return this};
f() === window; // or the global object
词法this
规则优先于严格模式this
规则
在ES2015规范中,我们可以通过检查的可能值的简单英文描述轻松看出这一点,这些值可以是词法的
、严格的
、或全局的
:
定义如何在函数的形式参数和代码体中解释此引用lexical
表示this
指的是一个词汇封闭函数的this
值strict
表示此
值的使用与函数调用所提供的完全相同<代码>全局表示此
值的未定义
被解释为对全局对象的引用
换句话说,函数的
行为可以是严格的、非严格的或词汇的。如果函数的[[ThisMode]]
是词法的(与箭头函数一样),它会使函数的严格/非严格状态与确定此设置行为无关。因为您是在全局范围内执行此操作的(其中此
是窗口
对象),而这个
在arrow函数中是词法的,我看不出这有什么出乎意料的地方?