繁体   English   中英

对Java语言关闭案例感到困惑

[英]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;

getCollectionusersCollection )返回的函数执行后,没有任何事情关闭cache 该范围没有返回任何函数。

cache需要在usersCollection函数之外定义,以便捕获对其的任何引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM