一道JS面试题

        function foo (something) {
            console.log(this.a,something)
            return this.a + something
        }
        function bind (fn,obj) {
            return function(){
                return fn.apply(obj,arguments)
            }
        }
        var obj = {
            a:2
        }
        var bar = bind(foo,obj);
        var b = bar(3);
        console.log(b)

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

阅读 2.7k
4 个回答

因为this改变了看懂没

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

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

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

var bar = bind(foo, obj);

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

var b = bar(3)

fn.apply(obj,arguments) 这句改变了foo中的this指向

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题