sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo escribir function-y aceptando el parámetro-fct_x que accede a var-a que debe definirse en function-y?

Si entendí tu pregunta correctamente, estás buscando alcance dinámico . Javascript tiene un alcance léxico, por lo que para capturar una variable, el cierre debe estar textualmente dentro de su alcance. De lo contrario, esto no es posible, sin contar trucos más o menos tontos como, por ejemplo:

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

Consulte también ¿Es posible lograr un alcance dinámico en JavaScript sin recurrir a eval? para más discusión y ejemplos.

En cuanto a su pregunta de MongoDB específicamente, no es posible en javascript puro inyectar una variable en el alcance de alguna función (nuevamente, sin recurrir a eval). Pero map-reduce de Mongo está escrito en C++, no en JS, y puede manipular el ámbito de forma arbitraria:

_scope->setFunction("emit", etc

Consulte la fuente .

Para completar, aquí hay un ejemplo con eval :

function map(ary, fun) {

    // define some locals
    var LOCAL = 42;

    // re-evaluate the function within the scope
    eval("fun=" + fun);

    // now fun sees our locals
    return ary.map(fun);
}

document.write(
    map([1,2,3], function(x) { return x * LOCAL }) // [ 42, 84, 126 ]
)