область действия анонимной функции javascript - PullRequest
2 голосов
/ 05 июля 2010

У меня есть следующая анонимная функция:

(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() {}

но это плохая идея, так как они будут в глобальном пространстве ...

Как я могу передать анонимное пространство внешней функции?

Ответы [ 2 ]

9 голосов
/ 05 июля 2010

Я все еще удивляюсь, почему вы хотите сделать функции частными, которые нужны снаружи ... Но вы идете:

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

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

  externalFunction(obj);
})();

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

Или вы можете передать f1 и f2 индивидуально, тогда вы ненужно поместить их в объект.

4 голосов
/ 05 июля 2010

Вы не можете передать область как объект, но вы можете создать объект с тем, что вы хотите из области:

externalFunction({ f1: f1, f2: f2 });
...