背景:
由于最近需要前端的技术,无意间用到了arguments对象,就在学习了一番
学习之后:
1、arguments是内置对象之一,说白了其实就是函数的一个内置属性,表示的是参数
例如:
function getUrlArgs(a,b,c){
alert(arguments.length); // 此处就是表示的getUrlArgs的参数的个数 你会感觉他弹出的是几呢?}
2、我认为很多人会跟我一样,认为弹出3(是滴,我之前也是这么认为的),恭喜你!!你错了
这里面弹出的是0,为什么??
因为arguments对象的长度是由实参决定的而不是形参决定的!!!
JavaScript中形参在严格意义上来讲他只是为了方便我们在函数中操作变量提供方便(说白了就是为我们定义了几个变量),
实际上实参已经存储在arguments对象中了。所以他会弹出0
3、arguments中还提供了一个非常有用的属性:callee
arguments.callee 返回的是arguments所在的当前函数的引用,一般递归操作的时候会用他来代替函数名
例子:
calleeDemo(1,2); // 实参和形参相等calleeDemo(1); // 实参和形参不等function calleeDemo(a, b) { alert(arguments.callee.toString()); // 弹出什么东东呢??自己验证吧,会更好的理解 if (arguments.length == arguments.callee.length) { window.alert("正确理解形和实参是有必要的!"); return; } else { alert("实参长度:" + arguments.length); alert("形参长度: " + arguments.callee.length); }}