Можно ли получить доступ к функции в анонимной функции? - PullRequest
0 голосов
/ 14 августа 2011

Рассмотрим следующий код:

(function($) {
  function hello(who)
  {
    console.log('Hello: '+who);
  }
})(jQuery);

$(document).ready(function() {
  hello('World');
});

Как можно было бы получить доступ к функции hello снаружи анонимной функции?

Ответы [ 3 ]

2 голосов
/ 14 августа 2011

Я бы сделал что-то подобное

var hello = (function() {
  return function(who)
  {
    console.log('Hello: '+who);
  };
})(jQuery);

$(document).ready(function() {
  hello('World');
});

где вы возвращаете функцию из анонимной функции, которую затем можете сохранить и получить к ней доступ в любой области, которая вам нравится

1 голос
/ 14 августа 2011

Предполагая, что вы в конечном итоге захотите добавить и другие методы к этому замыканию, вы можете создать пространство имен, используя шаблон модуля:

var myAppNamespace = (function($){
  var exports = {}, // the return object
      helloText = 'Hello: '; // private variable

  function concatText() {
    var returnString = '';
    for (var i = 0, il = arguments.length; i < il; i++) {
      returnString += arguments[i];
    }
    return returnString;
  } // private method

  exports.world = 'World'; // public property
  exports.hello = function ( who ) {
    console.log(concatText(helloText, who));
  }; // public method

  return exports; // assign exports to myAppNamespace
}(jQuery));

Здесь методы и свойства приведены только для демонстрации примеров.способов объявить вещи в частном порядке и публично в закрытии.Для иллюстрации:

myAppNamespace.hello(myAppNamespace.world); // -> Hello: World
myAppNamespace.hello('Bob'); // -> Hello: Bob
myAppNamespace.helloText; // undefined
myAppNamespace.concatText; // undefined

Кроме того, я использовал аргумент $ в самореализующейся функции, чтобы jQuery передавался чему-то, вы бы использовали $ для доступа к jQuery.

1 голос
/ 14 августа 2011
(function($) {
  function hello(who)
  {
    console.log('Hello: '+who);
  }

  $(document).ready(function() {
    hello('World');
  });
})(jQuery);

Просто переместите все ссылки на функцию hello внутри области действия.

...