¿Qué subset de aspectos de functional programming y características similares a Lisp proporciona JavaScript?

Directamente al punto, en https://stackoverflow.com/questions/4696618/is-haskell-a-lisp?answertab=votes#tab-top , hay un comentario de Kevin Cantu que dice:

Sí, yendo más allá de la syntax sola, JavaScript es probablemente más un Lisp que Haskell. (Originalmente concebido como una implementación del Esquema …)

Además, en Lambda the Ultimate: comstackdor Lisp to JavaScript en 100 líneas , dicen:

De inmediato está bastante claro que JS y Lisp tienen fuertes loops en el nivel semántico […]

Estoy familiarizado con Lisp y la functional programming, pero no con JavaScript. Entonces estas proposiciones hicieron preguntarse cuán poderoso es JavaScript. Lo que he leído hasta ahora es que proporciona expresiones lambda y cierres. ¿Qué conceptos de progtwigción más funcionales y características similares a Lisp proporciona? ¿Proporciona, por ejemplo, recurrencia de llamada de queue, o macros, o capacidad de manipular código como datos (como Lisp)?

Algunas cosas que proporciona JavaScript que se pueden considerar "similares a Lisp":

  • Funciones de primera class (inc. Lambdas y cierres)
  • Tipeo dynamic
  • Modelo de object dynamic que tiene algunas similitudes con CLOS
  • Un formatting de datos legible que coincida con el formatting del código fuente (JSON)
  • Evaluación de time de ejecución con una function "eval" (que se puede usar en un REPL interactivo)

Algunas cosas que Javascript no tiene son bastante comunes o centrales para otros Lisps:

  • Una representación homoicónica para código y datos (expresiones S)
  • Construido en literales para lists / secuencias vinculadas
  • Soporte para estructuras de datos inmutables en general (especialmente cierto para Clojure, donde cada estructura de datos es persistente e inmutable)
  • Un macro sistema extenso para la meta-progtwigción
  • Tipado estático opcional para la optimization del performance (por ejemplo, sugerencias de tipo en Common Lisp o Clojure)
  • Soporte de simultaneidad
  • Optimización de llamadas de queue