[英]Node.js: trouble with asynchronous code + js closures
我無法適應Node的單線程+異步性質,再加上javascript的函數閉包。
假設我有類似的東西:
function foo(bar) {
someAsyncFunction(function callback(err) {
// do stuff with 'bar'
});
}
如果我遺失了什么,請告訴我。 但我的理解是:
callback
將引用 bar
但是,如果foo
在bar
= 20時被調用一次,那么在從第一次調用調用callback
之前再次使用bar = 42
,那么在第一次調用foo
callback
bar
將為42。 換一種說法:
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
值(ASIDE從傳遞bar
一直向下和向上調用堆棧)? 感謝您的任何幫助。
不,當執行第一個異步回調時, bar
仍然是20。 每次調用foo
都會獲得自己的bar
,這個bar
不受未來foo
調用的影響。
這是不正確的。 每次調用foo
都會創建一個新bar
,因此每個回調函數都可以訪問不同的bar
。
如果你想在那里只有一個bar
,聲明它之外的foo
讓的每次調用foo
共享相同的bar
:
var bar;
function foo(arg) {
bar = arg;
someAsyncFunction(function callback(err) {
// do stuff with 'bar'
});
}
這里, foo
不會聲明一個新的bar
變量,而是設置在更高范圍內聲明的bar
的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.