Javascript 它是用来做什么的?一次下划线?

Javascript 它是用来做什么的?一次下划线?,javascript,underscore.js,Javascript,Underscore.js,我只看了一下Underline.js中源代码的once API,然后想知道它的用途是什么 在方法中,它似乎什么也不做: func = null 资料来源: _.once = function(func) { var ran = false, memo; return function() { if (ran) return memo; ran = true; memo = func.apply(this, arguments);

我只看了一下Underline.js中源代码的once API,然后想知道它的用途是什么 在方法中,它似乎什么也不做:

func = null
资料来源:

  _.once = function(func) {
    var ran = false, memo;
    return function() {
      if (ran) return memo;
      ran = true;
      memo = func.apply(this, arguments);
      func = null;
      return memo;
    };
  };

不清楚您是询问整个函数还是仅询问
func=null
行。如果是后者,请参见下面的步骤3


ran
最初为false

第一次运行返回的函数时:

  • ran
    设置为
    true
  • 调用一次传入
    的函数
  • 函数引用被删除(可能是为了帮助垃圾收集)
  • 备忘录
    返回
  • 再次运行返回的函数时(因为
    ran
    现在是
    true
    ):

  • 备忘录
    返回

  • 从官方网站:

    一次一次(功能)

    创建只能调用一次的函数版本。重复调用修改后的函数将无效,返回原始调用的值。用于初始化函数,而不必设置布尔标志,然后再进行检查

    var initialize = _.once(createApplication);
    initialize();
    initialize();
    // Application is only created once.
    

    该函数的功能可以在以下目录中找到:

    创建只能调用一次的函数版本。重复调用修改后的函数将无效,返回原始调用的值。用于初始化函数,而不必设置布尔标志,然后再进行检查

    var initialize = _.once(createApplication);
    initialize();
    initialize();
    // Application is only created once.
    
    下面解释了为什么设置
    func=null

    假设我们永远不会在u.once()上再次运行包装函数,我们可以 为
    func
    变量赋值null,使函数(及其所有继承的 如果需要,GC可以收集范围)


    同样值得指出的是,
    memo
    将保存最初执行的函数的结果


    因此,当您再次调用函数时,它将不会执行,但会返回第一次调用的结果。

    您想知道该方法,或者为什么要执行
    func=null
    ?是的,我似乎没有解释清楚,我想知道
    func=null
    是用来做什么的。删除对它的引用可以对它进行垃圾收集,这样它就不会占用内存。