在JS中函数是扮演者特别重要的角色,而一个函数之所以能有如此神奇的效果,它的参数发挥着重要的作用。
function text(a,b){ //a b 是形式上的参数 称为形参
console.log(a,b)
}
text(1,2) // 1,2 是实际的参数 称为实参
而js的函数的参数都是可以不定参的,而且不管是形参多了,还是实参多了对函数都没影响正常执行,主要依靠的是argument,他是一个类数组,管理的是我们往函数中传的实参,您看:
function text (a,b){
for(var i = 0; i<arguments.length;i++){
console.log(arguments[i]); // 1,2,3,4
}
}
text(1,2,3,4,)
上面这个函数果断打印出了我们传入的实际参数,那么argument和实参存在什么样的联系呢?是只单纯的保存实参,还是和实参有着映射关系呢?
function text (a,b){
arguments[0] = 4;
console.log(a) //4
}
text(1,2,3,4,)
打印形参a,发现它当argument[0]被赋值为4以后,a也跟着变化了,说明argument和实参是有着映射关系的。
这时候就想问一问既然有实参的这个类数组,那形参有吗?形参是没有的,但是如果想知道形参和实参谁多谁少?有什么办法吗?那你看:
function text (a,b){
if(text.length > arguments.length){
console.log('形参多了')
}else if(text.length < arguments.length){
console.log('实参多了')
}else{
console.log('一样')
}
}
text(1,2,3,4,) // 实参多了
text(1) // 形参多了
text(1,2,) // 一样
形参虽然没有argument这样的数组,但是可以通过函数名的length看到形参的长度,判断形参和实参谁多谁少。
知道了函数不定参我们还可以做一个函数不定参累加的小demo。
function add() {
var a = 0;
for (var i = 0; i < arguments.length; i++) {
a += arguments[i];
}
console.log(z);
}
入职不久的小前端从今以后开始自己的技术分享之旅,欢迎建议和批评。