间接调用
call和apply可以间接的调用函数。
1、允许显示的调用this。
2、任何函数都可以作为任何对象的方法调用,哪怕这个函数不是这个对象的方法。
3、参数问题,可以指定调用函数的实参,call使用调用函数的参数列表,而apply要求以数组形式传入。
可选形参
1、传入的实参少,那剩下的形参将是undefined;
2、要给多余的形参,若是不存在实参,附一个初始值。
3、可选的形参写在最后。
4、可选的形参前面加上注释/**optional/。
实参多
1、arguments是实参的列表。
2、实参数量大于形参时,多余的实参可以用arguments【2】,arguments【3】。。。获取。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
</body>
</html>
<script>
function test(){
console.log(arguments.length);
console.log(arguments[2]);
console.log(arguments[8]);
}
test(1,2,3,4,5,6,7);
</script>
不定实参函数:值不行、个数不到、顺序不定。
实参的集合arguments还有一个属性特别有用:arguments.callee;返回正在执行的函数;
<script>
function test(n){
n+=1;
console.log(arguments.callee);
}
test(1);
</script>
也可用于递归运算:
<script>
var sum=0;
function test(n){
if(n>10) return sum;
return sum=n+arguments.callee(n+1);
}
console.log(test(1));
</script>
形参多,记不住顺序。可以用一个将参数封在一个对象中,实参从对象中获取,对象的属性 键:值的形式,可以打乱顺序。
例子:
//定义目标数组和原数组、实参集合。 var a=[1,2,3,4]; var b=[]; var ar={ from:a, length:4, to:b, }; //多个实参的对象 function arrayCopy(argus){ //功能模块 都用统一的argus提供的接口获取参数 for(var i=0;i<argus.length;i++){ argus.to[i]=argus.from[i]; console.log(a[i]); console.log(b); }; }; arrayCopy(ar); //运行函数

浙公网安备 33010602011771号