javascriptの関数名が重複すると後勝ちで利用される

javascriptでは同じ名前の関数が複数定義されても特にエラーなどは発生しない。
その場合は後に宣言した側の内容が利用される。

console.log( "first:" + f() ); // → first: f2 ●関数は巻き上げられるので、ここで呼んでも問題ない

document.addEventListener("DOMContentLoaded", () => {
	console.log( "onload: " + f() ); // → onload: f2
});

function f() { return "f1"; }
function f() { return "f2"; }

ただしそれはコードの後ろに書いた方『ではなく』、後に評価された方が利用されるという意味なので、以下のような場合はコードでは上に出てくるものが利用される。

console.log( "first:" + f() ); // → first: f2

document.addEventListener("DOMContentLoaded", () => {
	console.log( "onload: " + f() ); // → onload: f3 ●イベント実行時に、イベントハンドラ内のf()が評価されるのでf3になる
	function f() { return "f3"; }
});

function f() { return "f1"; }
function f() { return "f2"; }



動作は現時点のchrome,firefoxで確認したが、これが正式な仕様なのかブラウザ実装なのかは不明。