2016-07-24 18 views
4

雖然我只是在玩弄JS,我寫了下面的代碼片段:在超載時,Javascript是否會選擇最近的方法?

function checkArgs(abc,nbn,jqrs){ 
    console.log("overloaded " +arguments.length); 
} 

function checkArgs(abc){ 
    console.log(arguments.length); 
} 

checkArgs("aa","lll","pp"); 

我看到爲「3」的輸出,但是我期待了把爲「超載3」。但是我沒有發生,但是如果我只是交換這些方法的位置,它確實會發生。

function checkArgs(abc){ 
     console.log(arguments.length); 
    } 


    function checkArgs(abc,nbn,jqrs){ 
     console.log("overloaded " +arguments.length); 
    }  

    checkArgs("aa","lll","pp"); 

背後的基本原理是什麼?

回答

4

javascript中沒有函數重載。

最新的方法聲明總是覆蓋前一個具有相同名稱的聲明。沒有錯誤拋出。

在javascript中的函數也是可變的。無論函數簽名如何,都可以傳遞任意數量的參數。

+0

我看到了,謝謝尼卡爾。 – Orion

0

在JavaScript中沒有重載,函數聲明獲取hoisted並且它被重載的方法覆蓋。順序中的最後一個方法覆蓋所有其他定義