引入
基本上每个编程语言都有自定义函数。自定义函数大大增加了大型项目代码可读性,造就了如今纷繁的代码世界。
有经验的程序员不难发现,在一些高级语言中,函数的参数其实并不是一个值或几个值那么简单。python这种简洁精炼的语言都会涉及“可选参数”“形参”等多个概念。
那JS是不是也带有一些跳脱于“简单输入数值”功能的参数呢?答案是显然的。
今天我们就大致了解一下js函数的高级参数,主要包括arguments
和rest
1.arguments
这个参数不需要我们特别去设置,他是javaScript函数创建之时便自带的。并且这个参数是在函数内部作用的——
功能是指向函数调用者传入的所有参数
arguments本质也是一个对象,可以用索引调取元素。但它本身不是一个array。
我们一般用这个arguments来实现一个可选参数的功能。比如我们接下来需要实现一个b为可选参数的功能,当传入的变量只有两个的时候,b默认为空值
function funtc(a, b, c) { if (arguments.length === 2) { // 如果拿到2个参数,实际传入的参数是a和b,c为undefined c = b; // 把b赋给c b = null; // b变为空值 } // ... }
这样就设计了一个func(a,[,b],c)的带有可选参数的自定义函数。
在arguments这里需要注意的还有一点,arguments取出的是使用者传入的所有参数,而不是符合定义条件的参数
什么意思呢?其实就是“即便你没有定义任何参数,只要你传入了参数,arguments就能调出”
function aaa() { return arguments[0];
运行结果显而易见:
aaa(1);//1 aaa(5);//5
2. reset参数
正如前面提到的,JS中你可以传入比已定义的参数多的参数,只不过在超过JS定义的参数之后,别的参数可能起不到作用。
但如果我们希望获取除了已经定义的参数之外的参数呢?
用arguments来进行循环遍历取出所有参数固然是一个办法,但不算是一个好办法。
于是ES6中引入了rest参数,只要我们在函数定义时加上...rest
即可开启他的功能。这时候我们取出剩下的参数的操作就变得很简单明了了——
function func(x, y, ...rest) { console.log('x 是 ' + x); console.log('y 是 ' + y); console.log(rest); }
那么我们输入输出的结果就可以是——
func(1,2,2,3,4) //x=1 //y=2 //array[2,3,4]
注意rest获取的是一个数组array哦