run(arg1)(arg2) – co to jest?

Jak pierwszy raz zobaczyłem coś takiego w JavaScript to pomyślałem – co się tutaj dzieje…? Jednak po chwili zastanowienia okazało się, że sprawa jest prosta – funkcja run zwraca funkcję, którą można od razu wywołać. Spójrzmy na przykład:

function run(arg1){
   console.log(arg1);
   return function(arg2){
      console.log(arg2);
   }
}

Przy wywołaniu:

run('runFunction')('fallbackFunction');

Otrzymujemy wypisane w konsoli:

runFunction
fallbackFunction