文章目录
0.在函数调用时,浏览器会传递进两个隐式参数
- 函数的上下文对象-- this
- 封装实参的对象–arguments
1.arguments对象的定义
- 每个函数都会自带一个arguments,arguments对象不能显式创建
- arguments对象时所在对象的数组对象,封装的是实参
- arguments对象有两个属性一个迭代器
- - 两个属性:
- - - length属性:返回参数个数
- - - callee属性:返回所在函数
- - 一个迭代器:Symbol
2.arguments对象的特性
2.1.arguments对象可以在函数内访问所在函数的实参
function fn(){
console.log(arguments[0]);
console.log(arguments[1]);
console.log(arguments[2]);
}
fn(11,22,33);//11 22 33
2.2.正常模式下arguments对象可以在运行的时候修改,在严格模式下则不可以
正常模式:
function fn(a, b) {
arguments[0] = 10;
arguments[1] = 20;
return a + b;
}
console.log(fn(4, 6));//30
严格模式:
function fn(a, b) {
'use strict';
arguments[0] = 10;
arguments[1] = 20;
return a + b;
}
console.log(fn(4, 6)); //10
2.3.使用arguments.length判断实参的个数
function fn(){
console.log(arguments.length);
}
fn(2,3,4,5);//4
fn(1);//1
fn();//0
2.4.使用arguments.callee返回对应的原函数
2.5.arguments对象时类数组对象,需要通过slice和逐一填入新数组来转换成数组形式
var fn1=function(){
console.log(arguments.callee==fn);//true
console.log(arguments.callee=fn2);//false
}
var fn2;
fn1();
3.arguments的应用
3.1.查看实参和形参个数是否一致
function add(a,b){
var realLen=arguments.length;
var len=add.length;
console.log(realLen,len);//3 2
if(realLen==len) alert("一致");
else alert("不一致");
}
add(11,22,33);//不一致
3.2.实现匿名函数的递归
var sum=function(n){
if(n==1) return 1;
else return n+arguments.callee(n-1);
}
console.log(sum(5));//15=5+4+3+2+1
3.3.传入数组的和
function add(){
var sum=0;
for(var i=0;i<arguments.length;i++){
sum+=arguments[i];
}
return sum;
}
add(11,22,33);//66