Skip to content

连续 bind()多次,输出的值是什么?

Posted on:2022年6月5日 at 20:43
var bar = function () {
  console.log(this.x);
};
var foo = {
  x: 3,
};
var sed = {
  x: 4,
};
var func = bar.bind(foo).bind(sed);
func(); //?

var fiv = {
  x: 5,
};
var func = bar.bind(foo).bind(sed).bind(fiv);
func(); //?

两次都输出 3

在Javascript中,多次 bind() 是无效的。

更深层次的原因, bind() 的实现,相当于使用函数在内部包了一个 call / apply ,第二次 bind() 相当于再包住第一次 bind() ,故第二次以后的 bind 是无法生效的。

原文转自:https://fe.ecool.fun/topic/b9bab51e-ab87-400a-9284-b996e853ecec