gpt4 book ai didi

javascript - 如何在具有 `this` 和 "strict"模式的常规箭头 fn 内确定正确的 "non-strict"?

转载 作者:行者123 更新时间:2023-12-04 10:02:30 26 4
gpt4 key购买 nike

对于下面的代码片段
案例 1:严格模式

"use strict"

let obj = {
method: function(){
console.log(this);
},
arrowMethod: () => {
console.log(this);
}
};

obj.method(); // call 1
obj.arrowMethod(); // call 2

let method = obj.method;
let arrowMethod = obj.arrowMethod;

method(); // call 3
arrowMethod(); // call 4

输出是:
{method: ƒ, arrowMethod: ƒ}
Window {parent: Window, opener: null, top: Window, length: 1, frames: Window, …}
undefined
Window {parent: Window, opener: null, top: Window, length: 1, frames: Window, …}
案例 2:非严格模式
将输出相同的片段
{method: ƒ, arrowMethod: ƒ}
Window {parent: Window, opener: null, top: Window, length: 1, frames: Window, …}
Window {parent: Window, opener: null, top: Window, length: 1, frames: Window, …}
Window {parent: Window, opener: null, top: Window, length: 1, frames: Window, …}
我的理解是:
在严格模式下,
  • call 1 - 当函数作为对象的方法被调用时, this 被设置为调用该方法的对象。
  • call 2 - 不管怎样,arrowMethod 的 this 被设置为它创建时的样子(在上面的例子中,全局对象)。
  • call 3 - 如果在进入执行上下文时未设置 this 的值,则它保持未定义。
  • call 4不管怎样,arrowMethod 的 this 被设置为它创建时的样子(在上面的例子中,全局对象)。

  • 在非严格模式下,
  • call 1 - 当函数作为对象的方法被调用时, this 被设置为调用该方法的对象。
  • call 2 - 不管怎样,arrowMethod 的 this 被设置为它创建时的样子(在上面的例子中,全局对象)。
  • call 3 - 由于代码不是在严格模式下,并且因为 this 的值不是由调用设置的,所以 this 将默认为全局对象,即浏览器中的窗口。
  • call 4 - 不管怎样,arrowMethod 的 this 被设置为它创建时的样子(在上面的例子中,全局对象)。


  • 不喜欢 call 4Case 1: Strict mode ,由于创建箭头 fn 时未设置 this 的值,因此它一直保持未定义状态?

    or


  • 是不是严格模式不适用于箭头 fns,因此在创建箭头 fn 时,它被设置为 window 对象?
  • 最佳答案

    是的,严格模式函数的规则不是来自 undefined全局对象不适用于箭头函数,因为它们没有自己的 this根本。它始终是 this来自外部范围的值。那就是 window在你的例子中。

    重要的是它们定义的函数是否使用严格模式,因为这是箭头函数从中获取值的地方:

     function strictMake() {
    "use strict";
    return () => { console.log(this == window); };
    }
    function sloppyMake() {
    return () => { console.log(this == window); };
    }

    const arrowFromStrict = strictMake();
    const arrowFromSloppy = sloppyMake();

    arrowFromStrict();
    arrowFromSloppy();

    关于javascript - 如何在具有 `this` 和 "strict"模式的常规箭头 fn 内确定正确的 "non-strict"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61759089/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com