已知如下代碼:
var foo = 1; var bar = 10;function a (arg, func) { this.foo = arg + this.bar; func(this.foo); }var b = { foo: 100, bar: 1000 };a.call(b, 10000, function(x) { console.log(this.foo + x); });
問: 該代碼執(zhí)行后控制臺打印結(jié)果是什么?分析產(chǎn)生該結(jié)果的原因。
我本來以為執(zhí)行結(jié)果會是22000,因為直接把call中的參數(shù)帶入函數(shù)a后是:
function a (arg, func) { this.foo = arg + this.bar; console.log(this.foo + this.foo); }
然后由于arg = 10000,b.foo = arg + b.bar = 10000 + 1000 = 11000,11000 + 11000 = 22000.
但是執(zhí)行結(jié)果卻是11001,也就是說console.log
里的this
指向的是window
,對此我表示不解,既然這個function是作為a
的參數(shù)帶入的,既然a
的this
被指向了b
,為什么這里的this
不會指向b
呢?希望各位高手解惑。另外,如果這個this
不指向b
,有沒有什么方法在仍使用this.foo
的情況下將這個this
指向b
?