call和apply的区别

两者的异同

callapply 都是为了改变 this 而存在的。
两者可以说是完全一致, 唯一的不同就在于接收的参数的形式不同。

  • call: 接收多个参数
  • apply: 接收一个数组参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 函数功能, 打印 this 和 所有参数
function f(){
console.log("this:"+this);
for(var i in arguments){
console.log("arguments["+i+"]="+arguments[i]);
}
}

f(1,2,3);
// this:[object Window]
// arguments[0]=1
// arguments[1]=2
// arguments[2]=3

f.call('我是this', 1,2,3); // 接收多个参数
// this:我是this
// arguments[0]=1
// arguments[1]=2
// arguments[2]=3

var arr = [1,2,3];
f.apply('我是this', arr); // 接收一个数组参数
// this:我是this
// arguments[0]=1
// arguments[1]=2
// arguments[2]=3

可以粗略的理解为如下Java代码

1
2
public void f1(String... strs);
public void f2(String[] strs);