关于方法、函数不带形参接收实参的问题
今天突然发现了一个问题,如下:
![](http://n4.ikafan.com/assetsj/blank.gif)
![](http://n4.ikafan.com/assetsj/blank.gif)
我在写Vue的时候检查$router
方法时,突然感觉到$router
的push()
方法看着有些别扭,最后回顾了一下JS的push()
方法,然后自己写了一段有关数组的代码,控制台检查,对比数组的push()
就发现Vue中(图一)的push()
方法带了三个形参,而数组中的push()
方法没带形参,可能这里就有同学觉得带形参是为了接收传过来的实参,而没带则不接收,其实按我往常的思维来说也是这样的,但事实上
![](http://n4.ikafan.com/assetsj/blank.gif)
我给push()
方法中添加了实参"tao"
,并且push()
方法也实际接收到了这个参数添加到了数组末尾,这就开始让我诧异起来,到底这个push()
方法是如何接收到这个"tao"
的呢?Vue中的push()
方法好理解,就是形参接收实参,没什么好讲的。这里主要讲一下数组的push()
方法接收实参问题。
按流程,不会先百度,结果前前后后花了几十分钟也没找到我想要的答案。我不断的改变搜索思路,最终找到了一个叫Arguments
对象的东西,它可以很好的消除我内心的诧异。来看一下关于Arguments
对象使用场景。
![](http://n4.ikafan.com/assetsj/blank.gif)
也就是说,当接收到的实参数量多于形参时,可以在函数中使用Arguments
对象来表示多出来的实参。
![](http://n4.ikafan.com/assetsj/blank.gif)
arguments[0]
表示第一个参数,这在表示方法上类似于数组,以此类推不同的索引表示接收到的不同参数。于是我检验了一下
![](http://n4.ikafan.com/assetsj/blank.gif)
输出
![](http://n4.ikafan.com/assetsj/blank.gif)
显而易见arguments[0]
接收到了"tao"
,由于没见过官方的说明,于是我就猜测数组的push()
方法中肯定也是用Arguments
对象来接收参数,因为这样做的好处是可以传任意个数的参数,也刚好符合数组中push()
方法添加数据的需求(想添加几个写几个),对于未知数量的实参,至于内部写几个arguments[i]
来接收这里我们不讨论(发散思维哦)。至此,这两个push()
方法(vue中$router
的push()
方法不等于数组的push()
方法)形参有无区别,和我心中的疑惑才完全解决,类比其他方法也是如此(举一反三)。希望对你也有所帮助。有什么问题可以评论区探讨。