网络编程 
首页 > 网络编程 > 浏览文章

Javascript中的arguments与重载介绍

(编辑:jimmy 日期: 2025/12/27 浏览:3 次 )

因为语言上的设计错误,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中的立即执行函数表达式介绍
下一篇:JavaScript中的闭包介绍
一句话新闻
微软与英特尔等合作伙伴联合定义“AI PC”:键盘需配有Copilot物理按键
几个月来,英特尔、微软、AMD和其它厂商都在共同推动“AI PC”的想法,朝着更多的AI功能迈进。在近日,英特尔在台北举行的开发者活动中,也宣布了关于AI PC加速计划、新的PC开发者计划和独立硬件供应商计划。
在此次发布会上,英特尔还发布了全新的全新的酷睿Ultra Meteor Lake NUC开发套件,以及联合微软等合作伙伴联合定义“AI PC”的定义标准。