我遇到很多情况,发现自己需要做以下类似的事情

function main() {
    var x = "Something";

    foo('do stuff', function bar(stuffResponse) {
        var y = x + stuffResponse;
    });
}

即我的回调函数需要我之前定义的x变量的闭包。但是,这使我感到烦恼,因为我不喜欢我的bar函数依赖于自身之外的变量,但最重要的是,我更喜欢这样编写代码...
function main() {
    var x = "Something";

    foo('do stuff', bar);
}

function bar(stuffResponse) {
    var y = x + stuffResponse;
}

但是很明显,如果我这样做,bar不知道什么是x了。在保持前者功能的同时,是否有一种干净的方法来实现后者的风格?

最佳答案

如评论中所述,可以通过将变量绑定(bind)到回调来完成您要实现的目标。这将为您提供值的副本,而不是引用原始变量:

function main() {
    var x = "Something";

    foo('do stuff', function bar(x, stuffResponse) {
        var y = x + stuffResponse;
    }.bind(null, x));
}

您也可以绑定(bind)this而不是null。但是,由于您没有使用this,所以这实际上没有任何意义。

10-06 12:25