arguments相关理解

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、文章存在意义

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值