核心提示:js函数不会检查函数调用时传入的参数个数与定义他时的形式参数个数是否一致,一般地,js函数调用时可以接收的参数个数为25个,当然不同的浏览器可能有差异,ECMAScript标准对这一点并没有规范。如果...
js函数不会检查函数调用时传入的参数个数与定义他时的形式参数个数是否一致,一般地,js函数调用时可以接收的参数个数为25个,当然不同的浏览器可能有差异,ECMAScript标准对这一点并没有规范。
如果你不确定函数调用时传入了多少个参数,可以使用函数的arguments对象。
arguments 有点像数组,arguments.length 为传入的参数个数,arguments[0] 是第一个参数,arguments[1]是第二个参数,类推...
函数对象的length属性:这个属性很少用到,甚至很少人知道,函数的length属性就是该函数定义时的形式参数个数。
复制代码代码如下:
function myfun(a,b){ alert(arguments.length); //弹出调用时实际传入的参数个数 alert(arguments[0]); //对应参数a return a+b; } alert(myfun.length); //形参个数,2
arguments对象还有其他属性,比如常用的arguments.callee ,指向该函数自身。
要注意:如果函数内部声明了与形参同名的子函数(同域内,变量未赋值时同名函数生效),arguments 的相应值也会被修改,但是,在作用域内使用 var 声明了同名的 变量则不会导致 arguments 的参数值被函数替换(但firefox 依然替换)。
复制代码代码如下:
function aa(a , b,c){ //js 群的一道题 function a(){} console.log(a); //function a console.log(aa); //如果作用域内没有 var a ,则 arguments[0] 为 function a (friefox(version 17) 则一定是function a) console.log(arguments[0]); var a = "ee"; //注销此句,考擦 arguments[0] 将变为 a 函数 var aa = "444"; arguments = 6; console.log(a); console.log(aa); console.log(arguments); } aa(1,2,3);