【问题标题】:use strict in javascript not working for fat arrow?在javascript中使用严格不适用于胖箭头?
【发布时间】:2016-07-25 11:35:04
【问题描述】:

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

"use strict";

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

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

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

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

【问题讨论】:

  • 由于您在全局范围内执行此操作(其中thiswindow 对象),并且箭头函数中的this 是词法,我看不出这有什么意外?

标签: javascript ecmascript-6 use-strict


【解决方案1】:

MDN 谈到arrow functions

与严格模式的关系

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

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

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

通过检查a function's [[ThisMode]] slot 的可能值(可以是lexicalstrictglobal)的简单英文描述,我们可以在 ES2015 规范中轻松看到这一点:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 2023-03-12
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    相关资源
    最近更新 更多