匿名函数中的静态变量

时间:2009-03-15 02:25:05

标签: javascript jquery variables function memoization

我正在尝试在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 个答案:

答案 0 :(得分:11)

如果您没有当前的功能名称,可以使用functioName.myVar = valuearguments.callee.myVar = value将变量保存在函数中。

arguments.callee是您当前的职能。

答案 1 :(得分:8)

对于匿名函数,您可以使用返回函数的函数。

例如:

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

应该像魅力一样工作,并确保静态初始化代码只执行一次。

答案 2 :(得分:1)

似乎找到了这个问题的更好答案elsewhere on Stack Overflow

简而言之,您实际上可以在不污染命名空间的情况下提供匿名函数名称,但仍然允许自引用。

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

答案 3 :(得分:0)

只要您将函数分配给这样的变量,您就应该能够以$.fn.collapsible的形式访问它,从而将变量指定为$.fn.collapsible.myvar