js中call()与apply()相同与不同这篇文章写的很清楚:
http://www.cnblogs.com/fighting_cp/archive/2010/09/20/1831844.html
call, apply方法相同点:
foo.call(this, arg1,arg2,arg3) == foo.apply(this,arguments)==this.foo(arg1, arg2, arg3)
call, apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例,也就是每个方法都有call, apply属性.既然作为方法的属性,那它们的使用就当然是针对方法的了.这两个方法是容易混淆的,因为它们的作用一样,只是使用方式不同.
call, apply方法区别:
从第二个参数起, call方法参数将依次传递给借用的方法作参数, 而apply直接将这些参数放到一个数组中再传递, 最后借用方法的参数列表是一样的.
例:Math.max
Math.max(param1,param2) --参数不支持数组
var max = Math.max.apply(null,array) --这样可得到一个数组中最大值
apply(Math.max, arr),arr是一个参数列表,
对于max方法,其参数是若干个数,即Math.max(a, b, c, d, ...)
当使用apply时,把所有参数加入到一个数组中,即array = [a, b, c, d, ...]
代入到原式,Math.max.apply(null, [a, b, c, d, ...])
实际上等同于Math.max(a, b, c, d, ...)
在此处,使用apply的优点是在部分JS引擎中提升性能。