日期:2014-05-16  浏览次数:20377 次

这个代码怎么理解?
var a = Function.prototype.call.apply(function(a){return a;}, [0,4,3]);alert(a);

这段代码怎么理解?Function.prototype.call ?

------解决方案--------------------
首先,把Function.prototype.call当成一个整体来看,它本身也是一个函数,因此和其他函数一样:具有apply方法。
其次,

call.apply(fun,[arg1,arg2,...])=fun.call(arg1,arg2,...)//apply()中的“数组”参数在call()中不再以数组形式存在,而是分别列了出来(本身call和apply的参数就是这样规定的:fun.call(this对象,传入fun的参数数组)-----fun.apply(this对象,传入fun的参数1,传入fun的参数2,...)。

所以,按照这两个条件把上面的语句分解后可得到:
var a=  function(a){return a;} .call (0,4,3);//fun.call()中的参数除第一个外,余下的为传入fun的参数。因此,在这里,4和3为传入function(a){return a}的参数,因为该匿名函数只需一个参数,因此按顺序只选到4做参数。

个人理解,希望对你有帮助。
可以自己做几个例子再测试验证一下。