理解JavaScript中的Arguments

一、Arguments是什么?

Arguments是JavaScript里函数的参数列表,每个函数(箭头函数除外)都有这么一个特别的变量用来表示所有传递到这个函数中参数。看一段代码,可以发现arguments像一个数组把参数列出来。

理解JavaScript中的Arguments

arguments是什么

二、Arguments有以下几个特点

1、参数是值传递,但它跟参数是引用关系

a) 首先JS参数是值传递,从以下代码可以看出变量重新赋值以后并不会影响之前的变量

理解JavaScript中的Arguments

值传递

b) 参数与arguments对象成员与对应参数是引用关系,修改会影响彼此

理解JavaScript中的Arguments

arguments修改时会影响参数,它们是同一个引用

2、通过arguments可以获得函数自身以及调用者

理解JavaScript中的Arguments

arguments.callee指向函数自身

理解JavaScript中的Arguments

argumnets.callee.caller指向函数的调用者,注意与this的区别

3、 Arguments对象不是一个 Array,它类似于Array,它除了length属性和可以索引元素之外没有任何Array的方法。比如push,pop,forEach等。

理解JavaScript中的Arguments

arguments is like Array

可以将arguments方便地转换为数组

理解JavaScript中的Arguments

Array from Arguments

4、 箭头函数中没有arguments

理解JavaScript中的Arguments

arrow function have no arguments

5、 默认参数和不定参数rest,对于这种会开辟新的作用域,修改后互不影响

理解JavaScript中的Arguments

默认参数

理解JavaScript中的Arguments

不定参数

理解JavaScript中的Arguments

不定参数

总结

以上就是关于arguments的介绍,arguments确实很有用,可以帮助我们实现类似函数重载的功能,也可以不用一开始就把形参明确,更可以把arguments往下传递。但要注意的是,因为arguments与参数是引用关系,做修改时最好先转化为数组,以便引起误会。同时callee与caller也易引起混淆,且效率不高,是不建议使用的,最好是利用不定参数rest来替代arguments,在使用不定参数和默认参数值时记住会开辟新的作用域出来。



分享到:


相關文章: