宝哥软件园

简单谈谈Javascript函数中的参数

编辑:宝哥软件园 来源:互联网 时间:2021-09-06

第一,争论的出现

javascript中的所有函数都包含一个名为参数的隐藏变量;它存储传递给这个函数的所有参数;

然后,让我们打开一个示例来查看参数的输出形式

(函数fn(){ console . log(arguments)})(1,2,3,4)

结果似乎以数组的形式打印在控制台上。我相信大多数人,包括我在内,看到这个输出时,都会认为参数是一个数组。因为是数组,所以可以使用数组的一些方法。看下一个例子;

(函数fn(){ arguments . push(5)console . log(arguments)})(1,2,3,4)

结果是错的——!(我在项目中刚踩过这个坑);

那我们就有疑问了。既然是数组,为什么不能用push方法呢?其他的东西比如pop和slice都做不到。是的,它们不能,尽管参数也可以以下标的形式得到相应位置的参数。当它本质上不是一个真正的数组时;

让我们通过instanceof打印它,看看它是否是Array的子对象。

(函数fn(){ console.log(参数instance of Array)})()

果然,它不是数组,所以我们会认为它是一个对象;

虽然它也可以遍历for循环中的参数,但是把它变成实数组是更好的选择;

第二,转换为数组

有很多方法可以转换,比如将对象传递给Array.prototype,或者遍历push到一个空数组,或者将它们传递给另一个函数。可以完成,下面简单介绍几种转换方法,并不详细介绍遍历push到空数组的方法;

第一种方法:

(函数fn(){ var arr=array . prototype . slice . call(arguments)arr . push(5)console . log(arr)})(1,2,3,4)

这种转换方式比较慢,在性能不好的情况下不推荐这种写入方式;

第二种方法:

函数fn() { fnArr.apply(null,参数);}函数fn arr (a、b、c、d)}个人推荐这种做法;

摘要

以上就是本文的全部内容。虽然写的不多,但还是希望大家在项目过程中不要误踩论点坑。希望这篇文章能对你有所帮助。

更多资讯
游戏推荐
更多+