我只是在underscore.js中看一下源的一次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;
};
};
答案 0 :(得分:12)
可以在documentation:
中找到该功能的功能创建只能调用一次的函数版本。重复调用修改后的函数将无效,从原始调用返回值。对初始化函数很有用,而不是必须设置一个布尔标志,然后再检查它。
为什么在此commit message中解释了设置func = null
:
假设我们永远不会再在_.once()上运行包装函数,我们可以 将null赋给
func
变量,所以函数(以及它的所有继承 如果需要,GC可以收集范围。
答案 1 :(得分:3)
来自官方的underscorejs网站:
一次 _.once(功能)
创建只能调用一次的函数版本。重复调用修改后的函数将无效,从原始调用返回值。对初始化函数很有用,而不是必须设置一个布尔标志,然后再检查它。
var initialize = _.once(createApplication);
initialize();
initialize();
// Application is only created once.
答案 2 :(得分:1)
目前还不清楚您是在询问整个功能还是只询问func = null
行。如果是后者,请参阅下面的第3步。
ran
最初是假的。
第一次运行返回的函数时:
ran
设置为true
once
的函数称为memo
已退回再次运行返回的函数时(因为ran
现在是true
):
memo
已退回答案 3 :(得分:0)
另外值得指出的是,memo
将保存最初执行的函数的结果。
因此,当您再次调用您的函数时,它将不会执行,但会返回第一个调用的结果。