js 函数中arguments的理解

136 阅读2分钟

1.定义

在JavaScript中,arguments实际上是当前函数的一个内置对象。arguments是一个类似于数组的对象,它存储了函数传递的所有实参。可以使用length属性和索引元素,但不能使用数组方法。

arguments展示形式是一个伪数组,因此可以进行遍历。

伪数组的特点:

  • 具有length属性
  • 按索引方式储存数据
  • 不具有数组pop,push等方法

2.作用

js语法不支持重载,但可以利用arguments对象模拟重载效果。

3.特性

arguments对象和Function是分不开的。因为arguments这个对象不能显式创建,arguments对象只有函数开始时才可用。

箭头函数没有自己的arguments,它的arguments都是在定义函数时绑定外层的arguments,而不是在执行过程中绑定的,所以不会因为调用者不同而发生变化。

4.使用方法

虽然arguments对象并不是一个数组,但是访问单个参数的方式与访问数组元素的方式相同。 arguments[i] 在js中不需要明确指出参数名,就能访问它们。

5.arguments上的属性

  1. arguments.callee:指向当前执行的函数(在 严格模式 下,第5版 ECMAScript (ES5) 禁止使用 arguments.callee())。
  2. argunments.length:指向传递给当前函数的参数数量。
  3. arguments.caller:已移除。

6.arguments虽然不是一个数组,但是它可以被转换为一个真正的Array

    // 方法一
    Array.prototype.hyslice = function () {
        var newArr2 = [];
        for (let i = start; i < arguments.length; i++) {
            newArr2.push(arr[arguments[i]])
        }
        return newArr2;
    }
    // 方法二
    var newArr1 = [].slice.call(arguments);
    var newArr2 = Array.prototype.slice.call(arguments);
    // 方法三       ES6
    var arr1 = Array.from(arguments);
    var arr2 = [...arguments];

补充:

什么是重载?

指函数的方法名相同,但参数不同

image.png

输出结果为NaN  6,这就说明后面的函数把前一个同名函数覆盖掉了,从而可以得出js函数不存在重载,永远调用最后一个方法。

JS函数不存在重载,但是我们可以实现js里面的模拟重载

image.png

arguments.length是有实参决定,即函数调用时候里面的参数个数决定!