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 回答