2009-03-15 2 views
5

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

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

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

Спасибо!

ответ

11

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

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

+0

Работает как очарование, спасибо! – Ivan

0

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

+0

Это не сработает, потому что это не та функция, к которой я пытаюсь привязать переменную. Благодарю. – Ivan

8

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

Например:

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

Должен работать как шарм и вы гарантированный код инициализации для статики выполняются только один раз.

+0

У меня возникло искушение использовать это, но это путано для моего мозга. Спасибо, в любом случае. – Ivan

1

Похоже, что лучший ответ на этот вопрос найден elsewhere on Stack Overflow.

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

mything.prototype.mymethod = function myKindOfFakeName() { 
    myKindOfFakeName.called = true; 
} 
+1

Собирался ответить на этот вопрос. Нет необходимости, чтобы выражения функций были анонимными. –

Смежные вопросы