Atualmente tenho estudado Clojure, uma linguagem de programação funcional bastante diferente das que estamos acostumados. Para ilustrar algumas diferenças com JavaScript, resolvi compilar alguns exemplos. Aproveitem a beleza de um LISP :).

(É importante ressaltar que existem diferenças entre diversas funcionalidades na linguagem, como as estrutura de dados que em Clojure são imutáveis e possuem outras funcionalidades)

Estruturas de dados

JavaScript*:

[1, 2]   // array
{"a": 1} // object

new Map([[a:1]])            // Map
new WeakMap([[{a:1}, 1]])   // WeakMap
new Set([1, 2])             // Set
new WeakSet([{a:1}, {b:2}]) // WeakSet

Clojure:

(1 2)  ;; list
[1 2]  ;; vector
{:a 1} ;; hash map / sorted-map
#{1 2} ;; set / sorted-set

Usando funções

JavaScript:

function add (a, b) {
  return a + b
}

var add = function(a, b) { return a + b }

var add = (a, b) => a + b

add(1, 2)

Clojure:

(defn add [a b]
  (+ a b))

(def add (fn [a b] (+ a b)))

(def add #(+ %1 %2))

(add 1 2)

Funções / métodos de coleções

JavaScript:

[1, 2, 3].map(x => x * 2)
[1, 2, 3].reduce((acc, x) => acc + x)
[1, 2, 3].filter(x => x % 2 === 0)
[1, 2, 3].push(4)
[1, 2, 3][0]

Clojure:

(map #(* %1 2) [1 2 3])
(reduce #(+ %1 %2) [1 2 3])
(filter #(even? %1) [1 2 3])
(conj [1 2 3] 4)
(nth [1 2 3] 0)

Destructuring

JavaScript:

let {a, b, ...rest} = {a:1, b:2, c:3, d:4}

Clojure:

(let [{:keys [a b] :as m} {:a 1 :b 2 :c 3 :d 4}
       rest (dissoc m :a :b)])

* alguns exemplos usam novidades do ES2015 e ES2016

** um vídeo mostrando código em JavaScript e Clojure