日期:2014-05-16 浏览次数:20582 次
<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的第二个参数传入.