[英]Confused about a Javascript closure case
我正在使用node-mongodb驱动程序编写一些node.js代码。 我决定像这样获取它们时缓存收集对象:
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”变量超出范围感到困惑。 我究竟做错了什么?
我想你想要这个:
function getCollection(collectionName) {
var cache;
return function(callback) {
而不是您现在所拥有的:
function getCollection(collectionName) {
return function(callback) {
var cache;
从getCollection
( usersCollection
)返回的函数执行后,没有任何事情关闭cache
。 该范围没有返回任何函数。
cache
需要在usersCollection
函数之外定义,以便捕获对其的任何引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.