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

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

[javascript]
if (true) {
function doSample() {
//…
}
}
[/javascript]

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

[javascript]
function doOuter() {
function doInner() {
//…
}
}
[/javascript]

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

[javascript]
if (true) {
var doSample = function () {
//…
}
}
[/javascript]

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

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