创建函数表达式时,请保留一些外部变量的副本

时间:2017-07-13 16:34:26

标签: javascript node.js

这是我的第一篇文章。我希望我能把一切都告诉你。我已经广泛搜索了一个解决方案,但我不确定如何描述我的问题。

这是一个问题,自从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);
        }
    }
}

问题出在匿名函数中,我希望使用subExtext的值。在调用函数时,循环已经为两个变量分配了不同的值。我希望函数使用函数创建时两个变量所具有的值

我尝试了许多不同的方法来提出解决方案。最近和最接近的是:

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

如果您不明白,请提出任何问题!谢谢你的时间:))

0 个答案:

没有答案