javascript - 克隆 javascript 函数,闭包范围

标签 javascript closures

我有这个关闭:

function CFetchNextData(ofs, pag, fetchFunction) {
  var offset = ofs;
  var limit = pag;

  return function(options, cb) {
    //do stuff to create params
    fetchFunction(params, cb);
    offset += limit;
  };
}

然后我这样创建一个变量:

var fetchInfo = CFetchNextData(0, 10, specificFetchFunction);
fetchInfo(options, myCB);

这样每次我调用 fetchInfo 时,分页都会自动设置为下一组数据。虽然效果很好 我想要有多个实例:“fetchInfo”,每个实例都有自己的范围。

var A = fetchInfo; // I'd like a clone with its own scope, not a copy
var B = fetchInfo; // I'd like a clone with its own scope, not a copy

我可以做:

var A = new CFetchNextData(ofs, pag, fetchFunction);
var B = new CFetchNextData(ofs, pag, fetchFunction);

但显然我每次都必须设置“ofs”和“pag”,而通过克隆 fetchInfo,我将拥有稳定的分页,只需设置一次即可。 你知道如何实现这一目标吗? 提前致谢

最佳答案

JavaScript 中没有克隆函数的概念。如果要创建多个闭包,则需要多次调用 CFetchNextData (或其他函数)。

您可以让 CFetchNextData 返回工厂函数而不是返回实际函数。但我不确定这是否真的是一个改进。

function CFetchNextDataFactory(ofs, pag, fetchFunction) {
  return function() {
      var offset = ofs;
      var limit = pag;

      return function(options, cb) {
        //do stuff to create params
        fetchFunction(params, cb);
        offset += limit;
      };
  };
}

var fetchInfoFactory = CFetchNextData(0, 10, specificFetchFunction);
var A = fetchInfoFactory();
var B = fetchInfoFactory();

关于javascript - 克隆 javascript 函数,闭包范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37618745/

相关文章:

swift - 关于 Swift 在闭包上的值(value)捕获

javascript - 在javascript中,如何从可能不存在的列表框中检查列表框项目(来自html)

javascript - Q require ("asap") 并在angularjs中获取相关数据

javascript - 如何在不点击按钮的情况下随机显示数组?

javascript - 在javascript中的不同范围之间返回值

ios - Alamofire 的 Swift 完成处理程序似乎没有执行

javascript - jQuery 倒计时(分钟 :seconds) from seconds

javascript - 使用可选的第一个参数记录 JavaScript

rust - 复制结构向量

python内部函数和id