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

JavaScript高阶函数示例
<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的第二个参数传入.