有人可以解释我如何实现_.before函数,因为我真的不明白为什么内部times
变量跟踪每个函数调用。它不应该在本地范围内并且每次都像正常功能一样重置吗?
_.before函数的代码:
// Returns a function that will only be executed up to (but not including) the Nth call.
_.before = function(times, func) {
var memo;
return function() {
if (--times > 0) {
memo = func.apply(this, arguments);
}
if (times <= 1) func = null;
return memo;
};
};
谢谢。
答案 0 :(得分:0)
密钥是func.apply(this, arguments)
使匿名函数递归。 times
的范围在内部匿名函数之外。当执行关闭时--times
被执行,times
的范围是before
函数。
答案 1 :(得分:0)
由于名为closures
的概念,示例中返回的函数会“记住”创建它的环境。在这种情况下,它会记住times
和func
个参数,即使它已被返回。
详细了解闭包:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures