"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倍。为什么?它与代码执行顺序或优先级有关?在这两种方法绑定?
答案 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)
要访问this
或b
,请使用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);
})