bind和forEach同时绑定this的时候,如何确定this指向?

"use strict";
const a=[1,2,30];
const b=[4,5,60];
const c=[7,8,90];
a.forEach((function (){
  console.log(this);
}).bind(globalThis),b);

这段代码有bind的this绑定,也有foreach第二个参数的this绑定。结果是输出全局对象,所以是bind的绑定生效。应该怎么理解这个结果呢?如果说bind绑定发生在词法阶段,那么可以确定它是在函数声明的时候就确定了,并且由于是硬绑定,后面的重新绑定也无法再影响到它。但是问题是,foreach参数的this绑定好像也是在词法阶段就确定的。这样的话,到底是以哪个绑定为准?不给出输出的话怎么判断this的指向?

阅读 2.6k
1 个回答

给你捋一下执行顺序

//这是forEach中的匿名函数
funcA = function (){
  console.log(this);
}
//这是经过bind后传入forEach中的回调
funcB = funcA.bind(gthis) = function (){
  funcA().call(gthis)
}
//然后运行a.forEach,里面的回调会被绑定this指向b
funcB().call(b)

可以看到运行funcB并把funcB里的this指向b,在运行funcA并把funcA里的this指向gthis

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题