sql >> Databáze >  >> NoSQL >> MongoDB

Jak zapsat funkci-y přijímající parametr-fct_x, který přistupuje k var-a, která musí být definována ve funkci-y?

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

  1. Dekódování JSON pomocí PHP od Mongo

  2. Nelze deserializovat řetězec z BsonType ObjectId v MongoDb C#

  3. C# MongoDB komplexní serializace třídy

  4. Seskupit MongoDB podle vnitřních prvků pole