Pokud jsem správně pochopil vaši otázku, hledáte dynamický rozsah . Javascript má lexikální rozsah, takže pro zachycení proměnné musí být uzávěr textově v jejím rozsahu. Jinak to nejde, nepočítám-li více či méně hloupé triky jako např.:
function makeClosure(context) {
return function() {
return context("a") + 1;
};
}
function y(evalThis) {
var a = 2;
if(evalThis)
return eval(evalThis);
return makeClosure(y);
}
closure = y();
document.write(closure()) // 3
Viz také Je možné dosáhnout dynamického rozsahu v JavaScriptu bez použití eval? pro další diskusi a příklady.
Pokud jde konkrétně o vaši otázku MongoDB, není možné v čistém javascriptu vložit proměnnou do rozsahu nějaké funkce (opět bez použití eval). Ale Mongo's map-reduce je napsán v C++, ne v JS, a může manipulovat s rozsahem libovolnými způsoby:
_scope->setFunction("emit", etc
Viz