Javascript 如何为arrow函数解析此绑定?

Javascript 如何为arrow函数解析此绑定?,javascript,node.js,this,Javascript,Node.js,This,在箭头函数中,没有此绑定。因此,箭头函数在词汇上解析该引用。如果我们在定义函数的不同范围内执行函数,它会记住该引用。这种行为是否由于关闭而发生 我知道函数可以通过闭包记住它的词汇环境,但是在chrome开发者工具中,这个不会出现在闭包中,而是出现在局部范围中。为什么会发生这种情况 function outerScope(outerVar){ let innerFun = () =>{ console.log(outerVar); console.log(this);

在箭头函数中,没有此绑定。因此,箭头函数在词汇上解析该引用。如果我们在定义函数的不同范围内执行函数,它会记住该引用。这种行为是否由于关闭而发生

我知道函数可以通过闭包记住它的词汇环境,但是在chrome开发者工具中,这个不会出现在闭包中,而是出现在局部范围中。为什么会发生这种情况

function outerScope(outerVar){
    let innerFun = () =>{
    console.log(outerVar);
    console.log(this);
}
return innerFun;
}

let innerFun = outerScope.call({test: "testing this reference"},"outerVar");
innerFun();

这种行为是否由于关闭而发生

你的说法暗示这是其他机制的副作用。它故意成为规范的一部分

本节涉及该主题,并附有以下注释:

arrow函数不为参数超级新的.target定义本地绑定。在arrow函数中对参数超级新.目标的任何引用都必须解析为词汇封闭环境中的绑定。通常,这将是一个直接封闭函数的函数环境。[……]

(注释的其余部分涉及对
super
的调用和方法)

注释不是定义,而是提醒。rason在规范中分散在几个不同的地方*,但最相关的是函数有一个特定的内部插槽,该部分定义为:

内槽 类型 描述 [[ThisMode]] (词汇、严格、全局) 定义如何在函数的形式参数和代码体中解释此
引用
lexical
表示this指的是一个词汇封闭函数的this
strict
表示值的使用与函数调用所提供的完全相同
global
表示未定义的值被解释为对全局对象的引用。