我正在使用node-mongodb驅動程序編寫一些node.js代碼。我決定緩存對象集合,當我得到他們這樣的:關於Javascript關閉案例的困惑
var db = connectionObject;
function getCollection(collectionName) {
return function(callback) {
var cache;
if (cache) return callback(null, cache);
db.collection(collectionName, function(err, collection) {
return err ? callback(err) : callback(null, cache = collection);
});
}
}
var usersCollection = getCollection('users');
usersCollection(function(err, collection) {
collection.find({}); // Rest of code here ...
});
的usersCollection功能的重複調用應該使用緩存的集合對象,不同的是它不 - 緩存變量始終是不確定的。更改代碼以解決問題:
return function(callback) {
var cache = arguments.callee;
if (cache.cached) return callback(null, cache.cached);
db.collection(collectionName, function(err, collection) {
return err ? callback(err) : callback(null, cache.cached = collection);
});
}
我仍然對'cache'變量超出範圍的原因感到困惑。我究竟做錯了什麼?
使用jsbeautifier或jsfiddle在發佈之前正確地設置您的代碼的格式。它提高了可讀性。 – 2011-03-09 16:43:03