2021-05-30

什么是argument?

总的来说 argument 是所在函数的一个内置类数组对象,类数组对象和数组相似,但是他不是数组,没有数组那样多的方法。
那么argument 里有什么呢?

function showargs() {
	console.log( arguments );
}
showargs(1,2,3,4,5);

在这里插入图片描述
这里我们可以看到arguments对象将我传入的五个参数以数组的形式保存在里面,还有保存了我传入函数的实参的个数(length)。而且我们可以看到arguments对象的 __ proto __ 是指向object的,这也说明了他是个类数组对象,而不是一个数组。

我在学js的时候函数调用时实参要和形参一一对应,但是现在我们可以在函数内部用argument 调出实参,于是有了下面的写法:

function add() {
	if( arguments.length == 2 ){
		return arguments[0] + arguments[1];
	}else{
		return '传入参数不合法';
	}
}
console.log( add(2,3) );
console.log( add(1,2,3) );

在这里插入图片描述
arguments还有一个叫做callee的属性,这个属性是表示的是当前函数的一个引用,简单点说,这个属性里面存储的我们调用的这个函数的代码。

function showcallee() {
    var a = '这里是代码';
    var b = '这是另一段代码';
    var c = a + b;
    console.log(arguments.callee);
    return c;
}
showcallee();

在这里插入图片描述
虽然我并不明白这个功能有啥用,但是还是了解了解吧,万一用上了呢。那argument 就只有这个作用吗,当然不是,argument很重要的一点是可以重载,重载的定义是指函数的方法名相同,但参数不同(重载可以减少代码的重复书写)。比如我写两个关于js的同名函数:

function add(a,b){
    var sum =a+b;
    console.log(sum);
}
add(2,3)
function add(c,d,e){
    var sum =c+d+e;
    console.log(sum);
}
add(2,3,4)

在这里插入图片描述
输出结果为NaN 9,这就说明后面的函数把前一个同名函数覆盖掉了,从而可以得出js函数不存在重载,永远调用最后一个方法。于是这就要用到argument了。

function calc(){
    //如果用户传入一个参数,求平方
    if(arguments.length==1){
        console.log(arguments[0]*arguments[0]);
    }else if(arguments.length==2){
    //如果用户传入两个参数,就求和
        console.log(arguments[0]+arguments[1]);
    }
}
calc(4); //16
calc(5); //25
calc(4,5); //9

在这里插入图片描述
还要强调一点:arguments这个对象不能显式创建,arguments对象只有函数执行时才会被创建,这就又牵涉到JavaScript的执行过程了,可以自行了解预编译期(预解析期)和执行期。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值