2016-07-24 2 views
4

、私はスニペット以下の書いた:Javascriptは、オーバーロードに際して最も近い方法を物理的に選択しますか?私はちょうどJSで遊んでいたが

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

私はそれを参照してください、感謝nicael。 – Orion

0

JavaScriptではオーバーロードはありません。関数の宣言はhoistedになり、オーバーロードされたメソッドによってオーバーライドされます。順序の最後のメソッドは、他のすべての定義を上書きします。

関連する問題