函数传参在各种语言中都是很常见的
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 }, 或者对传入的对象进行遍历赋值