函数传参在各种语言中都是很常见的

js的函数有一些很有意思的东西,很怪,但是很有意思

理解参数,js函数传入的参数我们可以用arguments(很像数组,但并不是Array的实例)这个变量接受
arguments是由长度的,长度是传入参数的个数,可以直接用arguments.length获取传入参数的个数
获取传入的某一个参数,可以用arguments[下标值]的方式直接获取

1
2
3
4
5
6
7
8
function sayHi() {
console.log(arguments.length);
document.write(arguments[0]);
document.write('<br />');
document.write(arguments[1]);
}

sayHi('user', 1231);

函数传入的参数未基础数据类型(number,string,boolean,undefined,null)的时候,在函数内对传入的参数进行重新复制是不会改变原有的变量的值,但是传入的是引用数据类型的时候,原有的变量会发生改变

1
2
3
4
5
6
7
8
9
10
11
12
function sayHi(name,num) {
num = 222
console.log(arguments.length);
document.write(arguments[0]);
document.write('<br />');
document.write(arguments[1]);
document.write('<br />');
}

var num = 123
sayHi('user', num);
document.write(num);
1
2
3
4
5
6
7
8
9
10
11
12
function sayHi(name,num) {
num.a = 222
console.log(arguments.length);
document.write(arguments[0]);
document.write('<br />');
document.write(num.a);
document.write('<br />');
}

var num = {a:1}
sayHi('user', num);
document.write(num.a);

阻止这种现象的产生可以用es6的解构赋值 let a = { …num }, 或者对传入的对象进行遍历赋值