在此代码段中,为什么“ this”最终绑定到窗口对象而不是数组b?

时间:2019-05-20 04:09:16

标签: javascript foreach 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);

在此JavaScript代码段中,bind()forEach()的第二个参数都用于绑定this。对于bind()this返回窗口对象,而对于forEach()的第二个参数,它将指向数组b。但是最终它比窗口对象高出3倍。为什么?它与代码执行顺序或优先级有关?在这两种方法绑定?

2 个答案:

答案 0 :(得分:2)

绑定后,无法再次绑定功能

let x = function(v,t) { console.log(this.name, v, t);}
x('unbound', 'arg2');                      // outputs [window.name unbound arg2]
x.bind({name:1}, 'one', 'arg2')();                // outputs [1 one arg2]
x.bind({name:2}, 'two', 'arg2')();                // outputs [2 two arg2]
x.bind({name:3}, 'three').bind({name:4}, 'four')(); // outputs [3 three four] rather than [4 four undefined]

您可以看到,在使用最后一个功能时,three绑定到第一个参数,four绑定到第二个参数,但是this仍然与第一个{ {1}}

也许研究此输出会有所帮助

bind

答案 1 :(得分:-1)

要访问thisb,请使用arrow functions而不是绑定

a.forEach(() => {
  console.log(this,b);
})

"use strict";


const a=[1,2,30];
const b=[4,5,60];
const c=[7,8,90];

a.forEach(() => {
  console.log(this,b);
})