我遇到很多情况,我发现自己需要做类似于以下的事情
attr
即。一个闭包,我的回调函数需要我之前定义的变量function main() {
var x = "Something";
foo('do stuff', function bar(stuffResponse) {
var y = x + stuffResponse;
});
}
。这让我很烦恼,因为我不喜欢我的x
函数依赖于自身之外的变量,但最重要的是因为我很多更喜欢像这样编写我的代码... < / p>
bar
但显然如果我这样做function main() {
var x = "Something";
foo('do stuff', bar);
}
function bar(stuffResponse) {
var y = x + stuffResponse;
}
不知道bar
是什么了。是否有一种干净的方式来实现后一种风格,同时保留前者的功能?
答案 0 :(得分:3)
变量可以通过以下任何方式获得:
您必须决定要使哪些x
可用。 4完全没有问题。 2不适用于此处。应避免使用3。根据具体情况,1是一个合理的选择。
答案 1 :(得分:1)
您可以使用内置的通话功能: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call并执行以下操作:
function main() {
var x = "so clean";
function foo(cb) {
cb.call(null, x);
}
foo(bar);
}
function bar(something) {
console.log(something);
}
答案 2 :(得分:0)
如评论中所述,您可以通过将变量绑定到回调来完成您要实现的目标。那将给你一个值的副本,而不是引用原始变量:
function main() {
var x = "Something";
foo('do stuff', function bar(x, stuffResponse) {
var y = x + stuffResponse;
}.bind(null, x));
}
您还可以绑定this
而不是null
。但是,由于您未使用this
,因此它没有任何意义。