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