2

私は次の無名関数を持っています:

(function() {
 var a = 1;
 var b = 2;

 function f1() {
 }

 function f2() {
 }

 // this => window object!
 // externalFunction(this);
})();

function externalFunction(pointer) {
 // pointer.f1(); => fail!
}

この無名関数から外部関数を呼び出し、そのポインターを渡して関数f1とf2を呼び出す必要があります。しかし、これは内部スコープではなくウィンドウオブジェクトを参照しているため、これを行うことはできません。

関数を次のように設定できます:

this.f1 = function() {}

しかし、彼らはグローバルな空間にいるので、それは悪い考えです...

匿名スペースを外部関数に渡すにはどうすればよいですか?

4

2 に答える 2

9

なぜあなたが関数をプライベートにするのか、それは外部で必要とされるのだろうかと私はまだ思っています...しかし、あなたはそこに行きます:

(function() {
  var a = 1;
  var b = 2;

  var obj = {
    f1: function() {
    },
    f2: function() {
    }
  }

  externalFunction(obj);
})();

function externalFunction(pointer) {
  pointer.f1(); // win
}

または、f1とf2を個別に渡すことができ、それらをオブジェクトに入れる必要はありません。

于 2010-07-05T11:37:22.717 に答える
4

スコープをオブジェクトとして渡すことはできませんが、スコープから必要なものを使用してオブジェクトを作成できます。

externalFunction({ f1: f1, f2: f2 });
于 2010-07-05T11:51:41.213 に答える