gpt4 book ai didi

javascript - 对 Javascript 闭包案例感到困惑

转载 作者:行者123 更新时间:2023-11-30 08:14:59 24 4
gpt4 key购买 nike

我正在使用 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);
});
}

我仍然对为什么“缓存”变量超出范围感到困惑。我做错了什么?

最佳答案

我想你想要这个:

function getCollection(collectionName) {
var cache;
return function(callback) {

而不是你现在拥有的:

function getCollection(collectionName) {
return function(callback) {
var cache;

关于javascript - 对 Javascript 闭包案例感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5248978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com