arguments和arguments.callee
<script type="text/javascript"> function fun(m,o,p,q,r) { alert(this.length); } function f(a,b) { arguments[0](9,10,11,12,13); } f(fun,5,6,7); </script>这段js最终显示的结果为4。这里的this取不到函数本身,只能取到f(fun,5,6,7)函数内部的变量数量4个。
function fun() { console.log(arguments.callee.length); } fun(88,66,44);
这就说明调用的是函数自身但是fun()形参为空,所以结果显示为0;
function fun(a,b,c,d,e) { console.log(arguments.callee.length); } fun(88,66,44);
结果为5,说明arguments.callee.length调用的fun函数本身形参的个数即a,b,c,d,e而不是外部的fun函数;
function fun(a,b,c,d,e) { console.log(arguments.callee.length); console.log(arguments.length); } fun(88,66,44);
arguement.callee.length调用的是函数的形参个数结果显示为5,而arguements.length调用的是函数的实参个数结果显示为3;
function fun(m,n,o,p,q,r) { alert(this.callee.length); } function f(a,b) { arguments[0](9,10,11,12,13); } f(fun,5,6,7);
此时this指的是f函数中的arguements对象中的形参个数(a,b)数量相当于arguements.callee.length。所以this.callee.length的个数为2;
this调用取决于调用对象,而不是所在的函数,这里f();函数被调用了所以this指代的f();中的内容而不是fun()函数的内容。