我遇到很多情况,发现自己需要做以下类似的事情
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
,所以这实际上没有任何意义。