我有这个关闭:
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/