Статические переменные в анонимной функции - PullRequest
5 голосов
/ 15 марта 2009

Я пытаюсь имитировать статические переменные в функции JavaScript со следующей целью:

$.fn.collapsible = function() {
  triggers = $(this).children('.collapse-trigger');
  jQuery.each(triggers, function() {
    $(this).click(function() {
      collapse = $(this).parent().find('.collapse');
    })
  })
}

Как сохранить объект «коллапс», чтобы его не нужно было «находить» при каждом вызове? Я знаю, что с именованными функциями я мог бы сделать что-то вроде «someFunction.myvar = collapse», но как насчет анонимных функций, подобных этой?

Спасибо!

Ответы [ 4 ]

12 голосов
/ 15 марта 2009

Вы можете сохранить свою переменную в функции, используя functioName.myVar = value или arguments.callee.myVar = value, если у вас нет текущего имени функции.

arguments.callee - текущая функция, в которой вы находитесь.

8 голосов
/ 15 марта 2009

Для анонимной функции вы можете использовать функцию, которая возвращает функцию.

Например:

var myAnonymousFunction = (function(){
    var myFirstStatic = $("#anElement");
    var anotherStatic = true;
    return function(param1,param2) {
        // myFirstStatic is in scope
        // anotherStatic also
    }
})();

Должен работать как брелок, и вы уверены, что код инициализации для статики выполняется только один раз.

1 голос
/ 31 января 2012

Кажется, что лучший ответ на этот вопрос можно найти в другом месте в Переполнение стека .

Короче говоря, вы можете фактически давать имена анонимным функциям, не загрязняя пространство имен, но по-прежнему разрешать самостоятельные ссылки.

mything.prototype.mymethod = function myKindOfFakeName() {
    myKindOfFakeName.called = true;
}
0 голосов
/ 15 марта 2009

Пока вы присваиваете функцию такой переменной, вы должны иметь доступ к ней как $.fn.collapsible и, таким образом, присваивать переменные как $.fn.collapsible.myvar.

...