ECMAScript arguments对象

1.arguments是什么?

  • arguments 是一个类数组对象
  • arguments对象是函数内部的本地变量,已经不再是函数的属性了。

2.arguments有什么用?

  • 在函数内部,使用特殊对象 arguments,无需明确指出参数名,就能访问这些参数。
    举例来说,我在addAll(){ }函数中,使用了arguments[0],但是我没有指定参数,当我要调用addAll(2)时,给他传了一个参数就可以在函数中获取到arguments[0]=2

  • 还可以用 arguments 对象检测函数的参数个数,引用属性 arguments.length 即可。
    如果一个函数有三个参数,那么arguments.length = 3,你可以通过以下方式获取参数:

    • arguments[0]
    • arguments[1]
    • arguments[2]

代码

function addAll(){
  let sum = 0;
  for(let i=0;i<arguments.length;i++){
     sum +=arguments[i];
  }
  console.log(sum);
}
addAll(10,20);

3.如果我们在函数中自己定义了一个名为arguments的变量,会出现什么情况?

  • 尝试之后发现整个程序报错,提示** Identifier 'arguments' has already been declared**,所以不要定义arguments变量。

4.callee属性

callee属性是一个指针,指向拥有这个arguments对象的函数

  • 用callee实现阶乘
function fac(num){
  if( num <= 1 ){
    return 1;
  } else{
    return num*arguments.callee(num-1);
  }
}
  • 解除函数名与函数体之间的耦合,对上面的函数fac,进行下面的操作
let newFac = fac;
fac = function(){
  return 0;
}
alert(newFac(5));  //120
alert(fac(5));     //0      

推荐阅读更多精彩内容

  • JS中的函数 一、定义绝对值函数 第一种方式: 第二种方式: 函数相当于是匿名的,可以把结果赋值给abs,通过ab...
    雪国_3472阅读 33评论 0 1
  • 映射(mapping): 一个集合中的每个元素与另一个集合中的元素所产生的关联。 字典(dictionary):从...
    苹果王子lww阅读 66评论 0 3
  • 装饰器 在一些场景我们需要额外的特性来支持标注或者修改类及其成员的时候,装饰器为我们在类及其远程通过元编译语法添加...
    趁着海风静静的吹来阅读 71评论 0 2
  • 泛型 Java5之后加入了泛型,它让数据类型变得参数化,这可能使开发者编写出更加通用的代码模块进行复用。Java中...
    AbstractCulture阅读 89评论 0 3
  • 简介:TextUtils类是系统自带的一个工具类,里面包含了一些静态方法,是处理一些常见的有关Text的工具的集合...
    i小灰阅读 123评论 0 2