1、首先需要弄清楚参数的意义
- 形参:函数定义的参数
- 实参:函数调用时实际传递的参数
- 参数调用:从左到右依次匹配,如果调用时传递的实参少于函数定义时的形参,则多余的参数对应的赋值为undefined
- 实参的个数如果多于形参的个数,可以通过arguments访问,如:arguments[i]
2、简介
- JavaScript没有重载函数的功能,但是Arguments对象能工模拟重载。JavaScript中每个函数都会有一个Arguments对象实例arguments,它引用函数的实参,可以用数组下表的方式进行arguments元素的引用。arguments[i]引用函数实参某个特定参数,arguments.length函数调用传递实参个数,arguments.callee引用函数自身。
- 由以上图片可以看出:arguments.callee与形参是一一映射的关系。实参调用更改时直接采用对象的读取修改方式。
3、arguments特点
- arguments不能如对象一样通过显式创建
- arguments不能独立存在,和Function密不可分
- arguments对象只有在函数调用开始时才可以使用
4、使用方法
- arguments对象不是一个数组(类数组),访问单个参数的方式与访问数组元素的方式相同。如:arguments[i],在js中不需要明确指出参数名,就可以进行访问。此种用法可以在不确定有几个形参时作为公共方法而存在。根据arguments的索引来判断执行的方法。
- arguments中callee的用法,由于arguments对象只有在函数调用开始时才可以使用,所以callee属性也仅当相关函数正在执行时才能使用。callee属性的初始值就是正在被执行的**Function**对象,实现匿名的递归函数。
5、知识拓展
- 第一个值为10,执行的是定义的method方法里面的"fn()"函数,这里this指向的window。所以输出的值为最外层定义的length。
- 第二个值为2,执行的是method方法里面的arguments[0]() 等价于 fn(),这里this执行的是arguments这个对象,所以输出值为arguments的长度。
- this指向不清楚的话,可以学习参考this指向相关文章:https://www.cnblogs.com/pssp/p/5216085.html 关于文章中当this碰到return时,使用new的时候自己理解应该是在window上新建了一个构造函数中的return对象(即return后面的内容)。
- call()、apply()、bind()的用法。参考链接 https://www.runoob.com/w3cnote/js-call-apply-bind.html
6、文章存在意义