前言
JavaScript 函数调用时,对参数的值没有进行任何的检查。
参数规则
JavaScript 函数对传入参数的类型、个数都没有进行检测。这也导致在函数名不出错的情况下,函数调用很随意(传参或多或少)。
如果函数调用时设置了过多的参数,参数将无法被引用,因为无法找到对应的参数名。 只能使用 arguments 对象来引用。
arguments 对象
JavaScript 函数有个内置的对象: arguments 。
arguments 包含了函数调用时传入的所有参数。通过这种方式你可以很方便的得到任何一个参数的值:
function myFunction(a,b) //函数内表面上能直接引用的参数只有a,b; 分别保存有函数调用时传入的100,200 { for (i = 0; i < arguments.length; i++) //arguments中保存有所有传入的参数,参数的个数 { console.log(arguments[i]); } } myFunction(100,200,300); //分别输出 100,200,300
arguments 对象的属性
属性 | 描述 | 使用示例 |
---|---|---|
length | 函数调用实际传入参数的个数 | arguments.length |
callee | 正在执行的函数本身的引用 | arguments.callee |
function myFunction(a,b) { console.log(arguments.length); //当前函数调用时传入的实参个数 console.log(arguments.callee.length); //当前函数形参个数 //通过 arguments.length == arguments.callee.length 是否成立,判断形参和实参个数是否一致 }
获取函数的形参个数: function.length
属性 callee 只有在函数执行时才有效 ( 只可以在函数内使用 ).
caller
caller 返回一个函数的引用,这个函数调用了当前的函数。
var a = function() { alert(a.caller); }; var b = function() { a(); }; b() ; //b调用了a,那么a.caller返回的是b的引用 a() ; //a没有在任何函数中被调用,也就是顶层调用),返回null
这个属性只有在函数执行时才有效 ( 只可以在函数内使用 ).