形参名不同的函数也会被认为是不同的函数
函数重载是指在同一感化域内,可以有一组具有不异函数名,差别参数列表(参数个数、类型、挨次)的函数,这组函数被称为重载函数。重载函数凡是用来声明一构成果相似的函数,这样做减少了函数名的数量,制止了名字空间的污染,对付措施的可读性有很大的好处。
但是在 JS 如果欠亨过一些要领是无法实现重载的,可以从以下两个角度去理解。
1. 要领签名要领签名指的是函数的名称加形参列表,并且通过函数的名称或者形参列表都可以区分出是差此外函数。
JS 中通过形参是没有步伐区分出差此外函数的,只能通过函数的名称区分出差此外函数,此刻我们来看一下下面的例子.
function add(a, b) { return a + b; } function add(a, b) { return a + b + 1; }上述实际上是一个函数,后面的函数 add 会笼罩前面的函数,究其原因还是因为 JS 是弱类型的语言,a 和 b 实际上都是用 var 声明的,等价于
function add(var a, var b) { return a + b; }所以在 JS 中只能通过函数名称来鉴别是不是同一个函数,形参是没有用的。
但是在强类型的语言中就是可以的,,例如在 c 语言中,界说函数时形参必需要指定类型,向里面传值的时候也必需通报指定类型的值。函数名不异,形参名差此外函数也会被认为是差此外函数。
#include <stdio.h> int add(int a, int b) { return a + b; } double add(double a, double b) { return a + b + 1; } int main() { printf("第一种声明函数功效 add(1, 3)= %d \n", add(1, 3)); printf("第二种声明函数功效 add(1.0, 3.0)= %lf \n", add(1.0, 3.0)); }上述两个函数是差此外,可以打印一下功效验证一下。
所以,在 C 语言这种强类型的语言中是可以实现函数重载的,JS 这种弱类型的语言是不成以的。
2. 函数指针另一中理解的角度是可以将函数名想象为指针,函数名中存放的是函数体存放的地点。还是通过代码来说明。
function add(a, b) { return a + b; } function add(a, b) { return a + b + 1.0; }上面的两种声明方法等价于
var add = function (a, b) { return a + b; } add = function (a, b ) { return a + b + 1.0; }最终 add 实际上指向的是第二个函数,第一个函数被笼罩了,所以最终挪用 add 时挪用的也是第二个函数,并不能实现函数的重载。
console.log(add(1, 3)) // 5完,如有不得当之处,欢迎斧正哦。
也是第二个函数,并不能实现函数的重载。
console.log(add(1, 3)) // 5完,如有不得当之处,欢迎斧正哦。
从两个角度理解为什么 JS 中没有函数重载
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32184.html