JavaScript绑定-箭头函数和绑定

JavaScript绑定-箭头函数和绑定,javascript,binding,Javascript,Binding,我有一段代码: const data = { x: "Target" } let bar = () => { console.log(this.x) } let final = bar.bind(data); final(); 此代码返回未定义的。下面是相同的代码,但带有非箭头函数: const data = { x: "Target" } let bar = function(){ console.log(this.x) } let final = bar.b

我有一段代码:

const data = {
  x: "Target"
}

let bar = () => {
  console.log(this.x)
}

let final = bar.bind(data); 
final();
此代码返回未定义的。下面是相同的代码,但带有非箭头函数:

const data = {
  x: "Target"
}

let bar = function(){
  console.log(this.x)
}

let final = bar.bind(data); 
final();
这个代码有效。我想了解为什么arrow函数阻止绑定工作。我知道他们处理这件事的方式不同。我知道它们保留了调用它们的原始上下文,在本例中不包括x。但是它也会阻止bind()工作吗

但是它也会阻止bind()工作吗

部分原因是,由于
bind
返回一个新函数,该函数使用特定的
this
调用原始函数-但箭头函数不使用调用它们的
this
,它们完全忽略它。相反,它们关闭了定义它们的
这个

箭头函数上的
bind
无法更改箭头的
概念。它所能做的只是它的第二个特性,即预先提供参数:

“严格使用”;
函数运行(){
常数f=(a,b,c)=>{
console.log(“this”,this);
控制台日志(“a”,a);
控制台日志(“b”,b);
控制台日志(“c”,c);
};
常数fbound=f.bind({},1,2,3);
f();
fBond();
}
run()
。作为控制台包装器{
最大高度:100%!重要;£

}
箭头函数优先于绑定。每当有两种或两种以上不同的方式设置此上下文时,都会按以下顺序解决: -箭头函数 -新关键字 -束缚 -打电话或申请