首先解释callee
参考网站 http://www.css88.com/archives/1706
callee是arguments的一个成员,仅当函数正在执行的时候才可用,so用于递归也行
代码示例:
(function () { function calleeDemo() { console.log(arguments.callee); } calleeDemo(); })();
结果输出
它的应用:
一、判断形参和实参的长度是否一致
实参 arguments.length
形参 arguments.callee.length
代码示例:
function judgeParameterLength(arg1,arg2) { if (arguments.length==arguments.callee.length){ console.log("形参与实参长度一致"); }else { console.log("实参长度"+arguments.length,"形参长度"+arguments.callee.length); } } judgeParameterLength(1,2); //形参与实参长度一致 judgeParameterLength(1); //实参长度1 形参长度2
二、递归
function sum(n) { if (n == 1) return 1; else return n + arguments.callee(n - 1); } console.log(sum(10)); //55
常规写法
function sum(n) { if (1 == n) return 1; else return n + sum(n - 1); } console.log(sum(10)); //55
理解:
两者结果是一样的。
非要找区别的话,正如我参考的那个网站,callee更能体现是调用自身的方法。
而我个人的理解是,这点还防止了方法重名造成的危害,毕竟js没有重载╮(╯▽╰)╭
所以还是写callee比较好。。