一道JS面试题

 function foo something { console.logthis.a,something return this.a + something } function bind fn,obj { return function{ return fn.applyobj,arguments } } var obj = { a:2 } var bar = bindfoo,obj; var b = bar3; console.logb

为什么输出是2,3,5呢,如果我在底部var c = bar4;输出的更多呢,叠加的那个5是怎么算出来的呢?

因为this改变了看懂没

这里主要是考擦你对Javascript里“this”的理解。

给你参考一篇专门讲this的文章:
英文原版:
http://dmitrysoshnikov.com/ec…
中文版:
http://www.cnblogs.com/justin…

如果你把上面的文章看了,肯定就豁然开朗了;这里大概讲一下为什么是5,

var bar = bindfoo, obj;

上面那句的效果是: bar实际上已经是函数foo的另外一个别名了,同时这个函数的this被预先绑定为obj对象。
所以后面的变量b自然而然就是2, 3, 5了:

var b = bar3

fn.applyobj,arguments 这句改变了foo中的this指向

发表评论

电子邮件地址不会被公开。 必填项已用*标注