Javascript,arguments,重载因为语言上的设计错误,arguments可以被当成一个数组。
   function zero () {     console.log(arguments[0]); }
 
  也会有
  function zero () {   for(var i=0;i<arguments.length;i++){      console.log(arguments[i]);   } }
 
 它利用了Javascript的一个事实,即Javasc 而这里的arguments变量给实参提供了一个类似数组的接口。因为这里的arguments的可变参数,我们可以利用这个有意思的东西来做一些有意思的事,比如重载。 Javscript 重载 stackvoerflow上有一个关于重载的问题,于是有了第一个答案
  if (typeof friend === "undefined") { } else { }
  还有一个答案则是
   switch (arguments.length) { case 0:     //Probably error     break; case 1:     //Do something     break; case 2: default: //Fall through to handle case of more parameters     //Do something else     break; }
 
 只是这种方式真的不好看,难道我们的函数最后要变成这样子的?  function zero1 (){     console.log('arguments 1') }; function zero2 (){     console.log('arguments 2') }; function zero () {   if(arguments.length == 1){     zero1();   } else{     zero2();   } }
 
 真的一点都不好看,即使我们换个switch..case,也不好看啊。 Javascript arguments不是一个数组 arguments不是向我们看到的那样一直是一个数组,有时候可能不是。
   function hello(){      console.log(typeof arguments); }
 
  这里arguments的类型是一个对象,虽然数组的类型也是一个对象,虽然我们可以将之转换为一个数组
  var args = Array.prototype.slice.call(arguments);
 
  但是这也表明了这不是一个数组,它拥有的只有Array的唯一一个属性,即length。除此还有arguments.callee Reference to the currently executing function. arguments.caller Reference to the function that invoked the currently executing function. arguments.length Reference to the number of arguments passed to the function.  Javascript,arguments,重载    
 
 |