Como @Memoize pero comparando los argumentos por IDENTIDAD (referencia),
sin serialización: cada nivel de un trie interno indexa un argumento —
los primitivos en un Map (SameValueZero: NaN funciona) y los
objetos/funciones en un WeakMap, de modo que las entradas se liberan
solas cuando el objeto argumento es recolectado.
Semántica distinta a @Memoize: la MISMA referencia acierta la cache, pero
dos literales estructuralmente iguales ({a:1} y {a:1}) son entradas
DISTINTAS. Ideal para métodos que reciben entidades o funciones; inútil si
cada llamada construye el argumento de cero.
Ventajas frente a la clave JSON.stringify de @Memoize: los argumentos
circulares no lanzan, las funciones y Symbol no colisionan y el orden de
propiedades es irrelevante.
Como
@Memoizepero comparando los argumentos por IDENTIDAD (referencia), sin serialización: cada nivel de un trie interno indexa un argumento — los primitivos en unMap(SameValueZero:NaNfunciona) y los objetos/funciones en unWeakMap, de modo que las entradas se liberan solas cuando el objeto argumento es recolectado.Semántica distinta a @Memoize: la MISMA referencia acierta la cache, pero dos literales estructuralmente iguales (
{a:1}y{a:1}) son entradas DISTINTAS. Ideal para métodos que reciben entidades o funciones; inútil si cada llamada construye el argumento de cero.Ventajas frente a la clave
JSON.stringifyde @Memoize: los argumentos circulares no lanzan, las funciones ySymbolno colisionan y el orden de propiedades es irrelevante.