[JavaScript] ブロック内での関数宣言の問題

ECMAScript(ECMA-262)では、ifやwhileなどのブロック内における関数宣言を認めていない。

if (true) {
	function doSample() {
		//...
	}
}

単純な関数内の関数(関数のネスト)はOK。

function doOuter() {
	function doInner() {
		//...
	}
}

ブロック内で関数を定義したい場合は、変数に式で代入する。

if (true) {
	var doSample = function () {
		//...
	}
}

ただしJavaScriptでは、ブロック内で関数宣言してもほとんど問題ない。

将来的なことを考えて標準(ECMAScript)に準拠しておきたいときのみ注意しよう。