Область действия анонимной функции JavaScript

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

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

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

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


person Alex Ivasyuv    schedule 05.07.2010    source источник


Ответы (2)


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

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

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

  externalFunction(obj);
})();

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

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

person gblazex    schedule 05.07.2010

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

externalFunction({ f1: f1, f2: f2 });
person Guffa    schedule 05.07.2010