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代碼中,若出現多個相同名稱的函數,則只有最後一個函數有效。