参考自<<JavaScript权威指南 第6版>>
/* * 将对象属性用作实参, 从而不必记住参数的顺序. */ function arraycopy(from,from_start,to,to_start,length){ for(var i=from_start,j=to_start;i<from_start+length;++i,++j){ to[j] = from[i]; } } function easycopy(args){ arraycopy(args.from, args.from_start || 0, //default param args.to, args.to_start || 0, args.length); } var a = [1,2,3,4],b = []; easycopy({from:a,to:b,length:4}); console.log(b); // [ 1, 2, 3, 4 ] /* * arguments对象有 callee 和 caller属性, 在非严格模式下, * callee: 指代当前正在执行的函数, 非标准的属性,但是大多数浏览器都已经实现了. 在匿名函数的递归调用中很有用. * caller: 可以访问调用栈 */ var fact = function(x){ if(x <= 1) return 1; return x * arguments.callee(x-1); } // 这样也是可以的 var fact2 = function(x){ if(x <= 1) return 1; return x * fact2(x-1); } console.log(fact(5)); // 120 console.log(fact2(5)); // 120 /* 代码自文档化, 因为js没有参数类型, 所以最好加参数注释或者取有意义的名字,如下: * number表示参数是数字类型的 * ... 表示数量不限. */ function max(/*number...*/){};