Hvis jeg har forstået dit spørgsmål rigtigt, leder du efter dynamisk scoping . Javascript er leksikalsk scoped, så for at fange en variabel, skal lukningen være tekstmæssigt inden for dens scope. Ellers er dette ikke muligt, uden at tælle mere eller mindre fjollede tricks som f.eks.:
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
Se også Er det muligt at opnå dynamisk scoping i JavaScript uden at ty til eval? for flere diskussioner og eksempler.
Med hensyn til dit MongoDB-spørgsmål specifikt, er det ikke muligt i rent javascript at injicere en variabel i en eller anden funktions omfang (igen, uden at ty til eval). Men Mongos map-reduce er skrevet i C++, ikke i JS, og kan manipulere omfanget på vilkårlige måder:
_scope->setFunction("emit", etc