Javascript Node.js:异步代码出现问题+;js闭包
我很难适应节点的单线程+异步特性,再加上javascript的函数闭包 假设我有这样的东西:Javascript Node.js:异步代码出现问题+;js闭包,javascript,node.js,asynchronous,closures,Javascript,Node.js,Asynchronous,Closures,我很难适应节点的单线程+异步特性,再加上javascript的函数闭包 假设我有这样的东西: function foo(bar) { someAsyncFunction(function callback(err) { // do stuff with 'bar' }); } 如果我遗漏了什么,请告诉我;但我的理解是: 由于关闭,callback将引用bar 但是,如果使用bar=20调用一次foo,则再次使用 bar=42在从第一次调用调用回调之前,bar将
function foo(bar) {
someAsyncFunction(function callback(err) {
// do stuff with 'bar'
});
}
如果我遗漏了什么,请告诉我;但我的理解是:
- 由于关闭,
将引用callback
bar
- 但是,如果使用
=20调用一次bar
,则再次使用foo
在从第一次调用调用bar=42
回调之前,
将在从bar
的第一次调用产生的foo
回调中为42。在里面 换句话说:
#1foo(20)
#1someAsyncFunction(函数回调(){})
2foo(42)
#2someAsyncFunction(函数回调(){})
#1------>使用callback()
=42bar
#2------>使用callback()
=42bar
我说的对吗?(如果
bar
是原语还是对象,这有关系吗?)。如果是这样,我如何确保callback
使用正确的bar
值(除了在调用堆栈上下传递bar
之外)?谢谢您的帮助。否,在执行第一个异步回调时,条形图仍然是20。对foo
的每次调用都会获得自己的bar
,它不受以后对foo
的调用的影响。不,bar
在执行第一次异步回调时仍然是20。对foo
的每次调用都会得到自己的条
,它不会受到以后对foo
的调用的影响,而这些调用是不正确的。每次调用foo
都会创建一个新的条
,因此每个回调函数都可以访问不同的条
如果希望只有一个bar
,请在foo
之外声明它,以便每次调用foo
时共享相同的bar
:
var bar;
function foo(arg) {
bar = arg;
someAsyncFunction(function callback(err) {
// do stuff with 'bar'
});
}
这里,foo
不声明新的bar
变量,而是设置在更高范围内声明的bar
的值。这是不正确的。每次调用foo
都会创建一个新的条
,因此每个回调函数都可以访问不同的条
如果希望只有一个bar
,请在foo
之外声明它,以便每次调用foo
时共享相同的bar
:
var bar;
function foo(arg) {
bar = arg;
someAsyncFunction(function callback(err) {
// do stuff with 'bar'
});
}
在这里,foo
并没有声明一个新的bar
变量,而是设置在更高范围内声明的bar
的值。“每次调用foo都会创建一个新的bar”-这就是困扰我的问题。事实上,你发布的例子正是我所想的。谢谢你的回复每次调用foo都会创建一个新的条',这就是困扰我的地方。事实上,你发布的例子正是我所想的。谢谢你的回复!谢谢你的回复。的确,你是对的,但我决定接受另一个答案,因为他提供的例子让我更容易理解范围界定问题。谢谢你!谢谢你的回复。的确,你是对的,但我决定接受另一个答案,因为他提供的例子让我更容易理解范围界定问题。谢谢你!