都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。因为 JavaScript 的函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念。
二者的作用完全一样,只是接受参数的方式不太一样。
例如,有一个函数 func1 定义如下:
var func1 = function(arg1, arg2) {};
就可以通过 func1.call ( this, arg1, arg2) ;
或者 func1.apply ( this, [ arg1, arg2 ] ) ;
或者 func1.bind ( this, arg1, arg2 ) ( ); 来调用。
其中 this 是你想指定的上下文,他可以任何一个 JavaScript 对象(JavaScript 中一切皆对象),call 需要把参数按顺序传递进去,而 apply 则是把参数放在数组里。
bind是返回对应函数,便于稍后调用,apply、call是立即调用;
(当希望改变上下文环境之后并非立即执行,而是回调执行的时候,使用 bind() 方法。而 apply/call 则会立即执行函数)
另:
- function show(sex){
- console.log("性别:"+sex);
- }
- var person={
- name:"aa",
- age:14
- };
- show.call(person,"男");
- show.apply(person,["女"]);
-
- //对于bind来说,用法更加的灵活
- var ss=show.bind(person,"不明");
- ss();