【问题标题】:Static variables in an anonymous function匿名函数中的静态变量
【发布时间】:2010-10-13 10:14:07
【问题描述】:

我试图在 JavaScript 函数上模拟静态变量,目的如下:

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

如何保存“折叠”对象,以便不必在每次调用时都“找到”它?我知道使用命名函数我可以执行“someFunction.myvar = collapse”之类的操作,但是像这样的匿名函数呢?

谢谢!

【问题讨论】:

    标签: javascript jquery variables function memoization


    【解决方案1】:

    看来elsewhere on Stack Overflow找到了这个问题更好的答案。

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

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

    【讨论】:

      【解决方案2】:

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

      例如:

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

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

      【讨论】:

        【解决方案3】:

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

        arguments.callee 是你当前所在的函数。

        【讨论】:

        • 箭头函数怎么样?
        【解决方案4】:

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

        【讨论】:

        • 那行不通,因为这不是我要附加变量的函数。谢谢。
        猜你喜欢
        • 2017-05-27
        • 2016-07-19
        • 1970-01-01
        • 2012-07-10
        • 1970-01-01
        • 2021-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多