練炭ブログ

萌え壁紙、Irvine、DMonkey、Proxomitron などの情報を扱ってます。

DMonkey: if/else ブロック内での関数定義

コメントなし»
(function () {
  alert (typeof foo + (typeof foo == 'undefined' ? '' : foo ()));
  if (true) {
    function foo () { return '#1'; }
  }
  else {
    function foo () { return '#2'; }
  }
  alert (typeof foo + (typeof foo == 'undefined' ? '' : foo ()));
}) ();
ブラウザ 1回目の alert 2回目の alert
IE function#2 function#2
Chrome function#2 function#2
Firefox undefined function#1
DMonkey undefined function#1

truefalse に変更した場合。

ブラウザ 1回目の alert 2回目の alert
IE function#2 function#2
Chrome function#2 function#2
Firefox undefined function#2
DMonkey undefined function#2

IE と Google Chrome は if/else ブロックのなかにあっても関数本体での定義として解釈され、後から記述した方(#2)が関数内全域で有効となります。

Firefox と DMonkey では、関数文が実行された時点でその関数(#1 または #2)が定義されます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です