解读JS中的arguments对象,来学习一下吧?

交互设计

  前言

  在Javascript中,arguments是所有函数都具有的一个内置局部变量,表示的是函数实际接收的参数对象。

  Javascript中的arguments对象

  arguments是一个类数组对象,之所以说是类数组,是因为它除了具有length属性外,不具有数组的一些常用方法,接下来我们就一起看看arguments对象的一些特性。

  通过索引访问

  可以通过索引访问arguments对象的值。

  索引访问

  arguments由实际参数决定

  arguments对象的值由实际参数决定,而不是由定义的形参决定,形参与arguments对象占用独立的内存空间。关于arguments对象与形参之间的关系,大家记住以下三句话。

  指定的形参传递值的情况下,arguments对象与形参值相同,并且可以相互改变。

  指定的形参未传递值的情况下,arguments对象对应的索引值返回undefined。

  指定的形参未传递值的情况下,arguments对象与形参值不能相互改变。

  argumens对象与形参

  通过以上3句总结,相信大家可以很容易知道对应的结果 。

  Javascript没有重载

  在诸如C++,Java等面向对象语言中,存在函数重载的概念。函数重载表示的是在函数名相同的情况下,通过函数形参参数类型或者参数个数的不同,来确定定义的函数。

  在Javascript中,由于不能通过形参的个数来确定实际传递参数的个数,因此Javascript中并没有函数重载特性。

  Javascript中没有重载

  上面定义了两个method3函数,两者的形参个数不一样,在调用的时候只传递两个参数,但是调用的确是下面一个method3方法,这可以证明Javascript中是没有函数重载,相同函数名的函数是会被后面定义的覆盖的。

  arguments.callee

  arguments.callee返回的是当前执行的函数,这个属性在使用递归执行的时候非常使用。

  以下例子就是通过arguments.callee实现的斐波那契数列方法。

  arguments.callee

  arguments对象扩展

  arguments是一个类数组对象,但是可以通过call方法将其扩展一个真实的数组对象。例如下面的方法将arguments对象进行扩展,使其具有slice方法。

  arguments对象扩展

  定义连接字符串的函数

  通过对arguments对象进行扩展,实现一个函数,只定义一个表示连接符的形参。但在实际调用的时候,除了表示连接符的参数,后续参数表示待连接的值。

  定义连接字符串的函数

  定义创建列表的方法

  在HTML中,通常使用ul或者ol来创建一个列表,我们首先一个函数,在传递参数为‘u’时,生成一个ul列表;传递参数为‘o’时,生成一个ol列表。

  定义创建列表的方法

  通过传递不同的参数,来确定生成的是有序的ol列表还是无序的ul列表,然后配合DOM操作,即可在页面上生效。

  总结

  今天这篇文章讲的是Javascript中的arguments对象,虽然在平时用的不是很多,但是关于它的知识点也是要掌握的,希望大家多写些demo加深对它的理解。

标签: 交互设计