js代码中出现相同名称的函数
最近在学习js,在学习函数时,发现一个比较有趣的事情,代码如下:
function abs(x) {
if(x >= 0){
return x;
}else{
return -x;
}
}
function abs(x) {
if(x >= 0){
return -x;
}else{
return x;
}
}
console.log(abs(1));
结果显示:
那么关于输出-1的推测,有以下两点:
- 函数顺序执行,当执行完第一个abs()函数时,返回值1将继续作为初始值进入第二个abs()函数。
- 在同样命名的情况下,第二个函数名称会将第一个函数覆盖,也就是说第一个abs()无意义。
接下来进行验证,我们改一下代码:
function abs(x) {
if(x >= 0){
x = x - 1;
return x;
}else{
return -x;
}
}
function abs(x) {
if(x >= 0){
return -x;
}else{
return x;
}
}
console.log(abs(1));
在最初始值于第一个abs()函数的并经之路上加上一条,那么结果是:
依旧是-1,显然第二种推测正确,那么这种覆盖是只限于两个同名函数还是多个呢?继续进行试验:
function abs(x) {
if(x >= 0){
return -x;
x = x + 1;
}else{
return x;
}
}
function abs(x) {
if(x >= 0){
x = x - 1;
return x;
}else{
return -x;
}
}
function abs(x) {
if(x >= 0){
return -x;
}else{
return x;
}
}
console.log(abs(1));
结果仍然是-1。对于使用webstorm的小伙伴可以观察到:多个相同函数名,除最后一个,其余的函数名都是灰色。
得出结论:js代码中,若出现多个相同名称的函数,则只有最后一个函数有效。