Комментарии 16
Я думаю, вам стоит углубиться в детали, поскольку статья практически не содержит особой премудрости.
Не рекомендовал бы такой способ создания функции (bad practice)
var func_multiply = new Function("arg1", "arg2", "return arg1 * arg2;");

Если хотите создать анонимную функцию, то так:
var my_func = function(){};

Если именованую, то:
function my_func(){}

А в целом статья напоминает мысли вслух человека, который только начал изучать JS.
Почитай вдумчиво для начала javascript.ru/Function и javascript.ru/AJAX
Удачи.
А точно, это же перевод. Тогда вообще не понимаю на кой переводить статьи такого уровня.
Ну да, статья для новичков. На Хабре такое не приветствуется?
Приветствуется, когда в примерах кода показаны «best practice», а не new Function, итд.
Пример с new Function тут приведён для наглядности, для иллюстрации тезиса «функции суть объекты».
Да! и хотя многопримудрые будут со мной не согласны, считаю, что не важно какого уровня знаний требует статья, вы все в чем то новички)) Главное качество литературы!
Странная у вас классификация функций.
var foo = function bar() {};
Это анонимная или именованная?
Анонимная, переменная bar ссылающаяся на функцию доступна только внутри тела самой функции.
Но имя же у функции есть, в свойстве name зафиксировано.

А если так, именованная или анонимная?
!function myFunc() {}

Плохая это классификация, лучше по спецификации: function expression и function declaration. Поведение функций всё-таки зависит от способа объявления, а не от наличия имени.
Вам стоит почитать про функциональное программирование, лямбда-исчисление и тому подобное.

Само по себе ваше понимание слова callback — уже дилетантское и неправильное, и именно поэтому вы не нашли никаких статей по теме. А искать на самом деле недалеко — lurkmore.to/SICP
Я просто оставлю это здесь JS async monad.

Но SICP в частности и Scheme вообще тоже хороши, поскольку
The key design principles within JavaScript are taken from the Self and Scheme programming languages.

По ссылке все-таки не совсем тот уровень, с которого надо начинать ;)
Хотя интересно, конечно.
Некоторое время назад был уверен, что ясно себе представляю как правильно передавать функции в параметрах, как обрабатывать параметры и т.п… Я писал довольно много на JS — и всё хорошо работало.
Но когда начал писать под Ноду — то понял, как сильно я заблуждался; я понял, насколько я был раньше не прав… =(
До сих пор регулярно натыкаюсь на случаи, когда понимаю, что мои представления о правильности вызовов функций и передачи в них параметров и возврат значения наверх по цепочке вызовов, да и сам принцип построения этих цепочек, немного неверны.
С одной стороны, безусловно, Нода и обычный браузерный JS — вещи разные. И в последнем многие косяки «прощаются» системой (в силу наличия строгой и ясной последовательности выполнения) и остаются незамеченными. С другой — всё не так просто как кажется =(
Меня сильно привлекла эта статья — но я разочарован — она ни о чём =(( Простите
А какие имено важные детали в этом вопросе остались за кадром?
Я больше склоняюсь что калбеки в некоторм роде зло, пораждающее макаронные изделия, и по возможности лучше использовать событийный (events) механизм (благо такой есть наверное в любой библиотеке или фреймворке).
Например нужно передавать callback нескольким функциям внутрь:

function doSubAction (callback) {
    // your code there
    callback();
}

function doAction (callback) {
    // your code there
    doSubAction(callback);
}

function do () {
    // your code there
    doAction(function () {
        console.log("I'm work");
    }
}

И это не учитывая того, что callback порой просто не имеет осмысленного имени где нужно, а еще в данную функцию иногда передаются переменные, с которыми тоже могут возникать вопросы.

Сейчас я страраюсь дважды задумываться над кодом, который вызвает калбеки.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.