js代碼中出現相同名稱的函數

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章