Adding _.once ... Issue #121

This commit is contained in:
Jeremy Ashkenas
2011-03-20 19:32:20 -04:00
parent 52916aad87
commit 39119065dc
2 changed files with 16 additions and 17 deletions

View File

@@ -474,17 +474,17 @@
_.debounce = function(func, wait) {
return limit(func, wait, true);
};
// Runs a function only if it's never been run before.
// Returns a function that will be executed at most one time, no matter how
// often you call it. Useful for lazy initialization.
_.once = function(func) {
if (_.indexOf(onceRunFunctions, func)) {
onceRunFunctions.push(func);
return func.apply(func, slice.call(arguments, 1));
}
}
// Internal record of functions that have been run via `_.once`.
var onceRunFunctions = [];
var ran = false, memo;
return function() {
if (ran) return memo;
ran = true;
return memo = func.apply(this, arguments);
};
};
// Returns the first function passed as an argument to the second,
// allowing you to adjust arguments, run code before and after, and