欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  web前端

Javascript中的arguments与重载介绍_javascript技巧

程序员文章站 2022-04-07 19:16:19
...
因为语言上的设计错误,arguments可以被当成一个数组。
复制代码 代码如下:

function zero () {
console.log(arguments[0]);
}

也会有
复制代码 代码如下:

function zero () {
for(var i=0;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.