这是一个问题,自从JavaScript开始以来,我已经有好几个月了。每当我遇到它时,我只是用另一种方式编码(总是更长)。
当我希望在函数表达式(循环内)中使用的变量发生变化时,我的问题总是发生在for循环中。我很难描述这里是我项目的一个片段:
var exportList = [
['getmarkets', 'getcurrencies', 'getticker', 'getmarketsummaries',
'getmarketsummary', 'getorderbook', 'getmarkethistory'],
['buylimit', 'selllimit', 'cancel', 'getopenorders'],
['getbalances', 'getbalance', 'getdepositaddress', 'withdraw',
'getorder', 'getorderhistory', 'getwithdrawalhistory', 'getdeposithistory']
];
for (var i1 = 0; i1 < exportList.length; i1++) {
for (var i2 = 0; i2 < exportList[i1].length; i2++) {
var ext = exportList[i1][i2];
var subExt = '';
if (i1 === 0) subExt = '/public/';
else if (i1 === 1) subExt = '/market/';
else if (i1 === 2) subExt = '/account/';
module.exports[ext] = function (options) {
options.ext = subExt + ext;
sendRequest(options);
}
}
}
问题出在匿名函数中,我希望使用subExt
和ext
的值。在调用函数时,循环已经为两个变量分配了不同的值。我希望函数使用函数创建时两个变量所具有的值。
我尝试了许多不同的方法来提出解决方案。最近和最接近的是:
module.exports[ext] = new Function(['options'],
`options.ext = "${subExt + ext}";
(${sendRequest})(options);`
);
sendRequest()
是一个正常的函数,在模块中是全局的。这不起作用的唯一原因是因为这个Function()
构造函数似乎创建了一个孤立的VM,sendRequest()
调用另一个全局函数,因此无法访问它。然而,即使这确实有效,我也会寻找另一种选择,因为它很丑陋。
额外/可能无用:我也尝试过这样:
module.exports[ext] = function (options) {
options.ext = this.subExt + this.ext;
sendRequest(options);
}
module.exports[ext].subExt = subExt;
module.exports[ext].ext = ext;
但this
似乎是undefined
。
如果您不明白,请提出任何问题!谢谢你的时间:))