JavaScript的函数支持重载吗?

JavaScript的函数支持重载吗?

JavaScript的函数支持重载吗?对于这个问题,主要有两个点,第一,JavaScript的函数;第二,重载。
首先,说一下重载。所谓重载,简单说,就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。所以说,重载主要需要两点:第一,同样的函数名。第二,不同的函数参数。
明确了重载的定义之后,我们再回到JavaScript这里。追本溯源,现在一说到JavaScript,我们就可以联想到ECMAScript,即JavaScript的标准。那么,这个标准里面对函数做出了那些规范呢?
首先,ECMAScript是没有函数签名的概念的,因为其参数是由包含零或多个值的数组来表示的。而没有函数签名,真正的重载是不可能做到的。
JavaScript里面的一个arguments对象。首先,ECMAScript函数的参数与其他语言的函数参数有一点不同。ECMAScript函数不介意传进来的参数个数和类型。也就是说,在你定义了函数只接受两个参数之后,你仍然可以在调用的时候传递零或多个参数。这并不会报错。原因就在于arguments对象。ECMAScript中,函数的参数始终是存放在一个数组中,而通过arguments对象,就可以访问到这个数组。所以,只需要使用length属性就可以确定调用函数时传递了多少个参数。
说到这里,我们可以来尝试这样写:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
showTip(...args) {
if(args.length == 1){
console.log('你只传入了一个参数!');
console.log(args);
setTimeout(() => {
this.hideTip();
},3000);
}else if(args.length>1){
console.log("你传入了大于1个的参数");
console.log(args);
setTimeout(() => {
this.hideTip();
},args[2]);
}
}

@@@@由于文档要求尽量不要使用argument

  • 不要使用 arguments。可以选择 rest 语法 … 替代。
  • 为什么?使用 … 能明确你要传入的参数。另外 rest 参数是一个真正的数组,而 arguments 是一个类数组。
1
2
3
4
5
6
7
8
9
// bad
function concatenateAll() {
const args = Array.prototype.slice.call(arguments);
return args.join('');
}
// good
function concatenateAll(...args) {
return args.join('');
}

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. JavaScript的函数支持重载吗?
,