日期:2014-05-16 浏览次数:20509 次
<html> <head> <title>高阶函数示例</title> <script> Array.prototype.map = function(func){ var len = this.length; var resArray = []; for(var i = 0 ; i < len ; i ++){ //func.call()的第一个参数作为call函数体中this的引用,如果call函数第一个 //参数为null或undefined那么this引用则为window, //double函数的alert(this.location.href);证明了这一点 //this[i]实参则赋给了double函数的x形参 //因此call是可以改变double函数体的this引用值的 resArray[i] = func.call(null,this[i]); } return resArray; } function double(x){ //alert("arg0="+arguments[0]+",arg1="+arguments[1]); alert(this.location.href); return x*2; } function gjhscs(){ var a = [1,4,5,2]; var b = a.map(double); var c = ""; for(var i = 0 ; i < b.length ; i ++){ c += ","+b[i]; } alert(c.substring(1,c.length)); } </script> </head> <body> <input type="button" value="高阶函数测试" onclick="gjhscs();"/> </body> </html>
?对于apply和call两者在作用上是相同的,但两者在参数上有区别的。
对于第一个参数意义都一样,但对第二个参数:
apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。
如
func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,
[var1,var2,var3])
同时使用apply的好处是可以直接将当前函数的arguments对象作为apply的第二个参数传入.