javascript Function.call中的this指向问题 财富值5

2016-10-17 17:30发布

已知如下代码:

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); });

问: 该代码执行后控制台打印结果是什么?分析产生该结果的原因。

我本来以为执行结果会是22000,因为直接把call中的参数带入函数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.

但是执行结果却是11001,也就是说console.log里的this指向的是window,对此我表示不解,既然这个function是作为a的参数带入的,既然athis被指向了b,为什么这里的this不会指向b呢?希望各位高手解惑。另外,如果这个this不指向b,有没有什么方法在仍使用this.foo的情况下将这个this指向b

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
mishen - whatsns产品经理
1楼-- · 2016-10-17 18:14

因为你在传func的时候没指定this,传了一个匿名函数,然后在a里面直接执行了没指定this,在非严格模式下,this指向window。

一周热门 更多>