关于方法、函数不带形参接收实参的问题

今天突然发现了一个问题,如下:


我在写Vue的时候检查$router方法时,突然感觉到$routerpush()方法看着有些别扭,最后回顾了一下JS的push()方法,然后自己写了一段有关数组的代码,控制台检查,对比数组的push()就发现Vue中(图一)的push()方法带了三个形参,而数组中的push()方法没带形参,可能这里就有同学觉得带形参是为了接收传过来的实参,而没带则不接收,其实按我往常的思维来说也是这样的,但事实上

我给push()方法中添加了实参"tao",并且push()方法也实际接收到了这个参数添加到了数组末尾,这就开始让我诧异起来,到底这个push()方法是如何接收到这个"tao"的呢?Vue中的push()方法好理解,就是形参接收实参,没什么好讲的。这里主要讲一下数组的push()方法接收实参问题。


按流程,不会先百度,结果前前后后花了几十分钟也没找到我想要的答案。我不断的改变搜索思路,最终找到了一个叫Arguments对象的东西,它可以很好的消除我内心的诧异。来看一下关于Arguments对象使用场景。

也就是说,当接收到的实参数量多于形参时,可以在函数中使用Arguments对象来表示多出来的实参。

arguments[0]表示第一个参数,这在表示方法上类似于数组,以此类推不同的索引表示接收到的不同参数。于是我检验了一下

输出

显而易见arguments[0]接收到了"tao",由于没见过官方的说明,于是我就猜测数组的push()方法中肯定也是用Arguments对象来接收参数,因为这样做的好处是可以传任意个数的参数,也刚好符合数组中push()方法添加数据的需求(想添加几个写几个),对于未知数量的实参,至于内部写几个arguments[i]来接收这里我们不讨论(发散思维哦)。至此,这两个push()方法(vue中$routerpush()方法不等于数组的push()方法)形参有无区别,和我心中的疑惑才完全解决,类比其他方法也是如此(举一反三)。希望对你也有所帮助。有什么问题可以评论区探讨。

(0)

相关推荐