練炭ブログ

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

DMonkey: 名前付き関数式で定義されたグローバル関数からはクロージャが使えない

コメントなし»

名前付き関数式で定義されたグローバル関数からはクロージャが使えません。

(function () {
  var a = 'abc';
  void function Foo () { alert (a); };
}) ();

Foo ();   // Exception: ENameError(3) => undefined -a

グローバルスコープだけを見ているようです。

var a = 'outside';

var f = (function () {
  var a = 'inside';
  return function Foo () { alert (a); };
}) ();

f ();   // inside

Foo ();   // outside

(function () {
  var a = 'inside2';
  Foo ();   // outside
})();

定義した関数の中身に関しては通常通りクロージャが働きます。

(function () {
  void function Foo () {
    var a = 'abc';
    (function () { alert (a); }) ();
  };
}) ();

Foo ();   // abc

コメントを残す

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