【发布时间】:2013-11-27 21:36:13
【问题描述】:
我无法适应 Node 的单线程 + 异步特性以及 javascript 的函数闭包。
假设我有类似的东西:
function foo(bar) {
someAsyncFunction(function callback(err) {
// do stuff with 'bar'
});
}
如果我遗漏了什么,请告诉我;但我的理解是:
- 由于关闭,
callback将有一个 reference 到bar -
但是,如果
foo被调用一次,bar= 20,那么再次使用bar = 42之前callback在第一次调用时被调用,那么bar将是callback中的 42,这是由第一次调用foo产生的。在 换句话说:-
foo(20)#1 -
someAsyncFunction(function callback() {})#1 -
foo(42)#2 -
someAsyncFunction(function callback() {})#2 -
callback()#1 --------> 使用bar=42 -
callback()#2 --------> 使用bar=42
-
我说得对吗? (bar 是原始的还是对象有关系吗?)。如果是这样,我该怎么做才能确保callback 使用正确的bar 值(除了将bar 一直向下和向上传递调用堆栈)?感谢您的帮助。
【问题讨论】:
标签: javascript node.js asynchronous closures