Quando unimos o poder do Closure com o do Currying, é possível ganharmos performance através do princípio da avaliação tardia. As funções que fazem uso desse princípio são chamadas de Funções Lazy.
Através da avaliação tardia, é possível antecipar todo o processamento que já é possível ser executado, e adiar o que não pode ou não é possível de ser executado naquele momento. Dessa forma, ganha-se tempo.
function eager(a, b) { // TRECHO apenas para simular um processamento demorado // ignorem os detalhes de implementação const fim = Date.now() + 2500 while(Date.now() < fim) {} // FIM DO TRECHO const valor = Math.pow(a, 3) return valor + b } function lazy(a) { // TRECHO apenas para simular um processamento demorado // ignorem os detalhes de implementação const fim = Date.now() + 2500 while(Date.now() < fim) {} // FIM DO TRECHO const valor = Math.pow(a, 3) return function(b) { return valor + b } } console.time('#1') console.log(eager(3, 100)) console.log(eager(3, 200)) console.log(eager(3, 300)) console.timeEnd('#1') console.time('#2') const lazy3 = lazy(3) console.log(lazy3(100)) console.log(lazy3(200)) console.log(lazy3(300)) console.timeEnd('#2')