underscore.js .before函数实现

时间:2016-08-09 13:34:39

标签: javascript underscore.js

有人可以解释我如何实现_.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;
    };
  };

谢谢。

2 个答案:

答案 0 :(得分:0)

密钥是func.apply(this, arguments)使匿名函数递归。 times的范围在内部匿名函数之外。当执行关闭时--times被执行,times的范围是before函数。

答案 1 :(得分:0)

由于名为closures的概念,示例中返回的函数会“记住”创建它的环境。在这种情况下,它会记住timesfunc个参数,即使它已被返回。

详细了解闭包:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures