Как понять данную запись say('Hello')('World') ?
В JS функции являются гражданами первого класса. Это значит, среди всего прочего, что их можно передавать в качестве аргументов в другие функции и возвращать в качестве результата.function say (str1) {
    return function (str2) {
        return str1 + str2;
    }
}
Это называется каррирование. Реализацию показал @k12th.