call&apply与bind的区别?

既然callapplybind这三个方法都是改变this指向的,那具体区别在哪呢?

阅读 2.5k
5 个回答
  1. apply 、 call 、bind 三者都是用来改变函数的this对象的指向的;
  2. apply 、 call 、bind 三者第一个参数都是this要指向的对象,也就是想指定的上下文;
  3. apply 、 call 、bind 三者都可以利用后续参数传参;
  4. bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。

call第一个参数是this,后面的参数是要传入函数的参数,用逗号分隔;
apply第一个参数是this,后面的传入一个数组,数组里面的数据是要传入函数的参数,顺序跟数组内元素顺序一样;

// window.foo(1, 2, 3);
foo.call(window, 1, 2, 3); 
foo.apply(window,[1, 2, 3]);

bind之后返回一个this固定的函数,不能再改变this。

var f = foo.bind(window);
f.call(document);//f的this还是window

call bind apply 这三个函数的第一个参数都是 this 的指向对象,第二个参数差别就来了:call的参数是直接放进去的,第二第三第n个参数全都用逗号分隔,直接放到后面 obj.myFun.call(db,'成都', ... ,'string' );apply的所有参数都必须放在一个数组里面传进去 obj.myFun.apply(db,['成都', ..., 'string' ]);bind除了返回是函数以外,它的参数和call一样

  1. call和apply函数的用法其实是一样的,只是传参的形式不一样. apply可以传递数组.并且执行函数.
  2. bind不会调用函数,会把函数返回.

这...,随便找本 JavaScript 书都能讲的清清楚楚的

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