За запитом, ось коментарі, представлені як відповідь:
Я не впевнений, що ви повністю громіть на те, що функції в JS є першокласними об'єктами, і тому вони можуть зберігатися до необхідності за останній час, коли вони створені.
Наприклад, скажіть, що ви хочете записати у файл, після чого роздрукуйте повідомлення журналу; тож ви викликаєте функцію "write ()" (або будь-яку іншу) і передаєте їй функцію, яка виводить повідомлення журналу (це відкладена функція зворотного виклику). "write ()" внутрішньо зберігає посилання на дану функцію, починає писати у файл та встановлює власний зворотний дзвінок, щоб знати, коли запис закінчено. Потім він повертається до того, як буде записано; коли він є, внутрішній зворотний виклик якимось чином викликається (це основна робота основної системи - у випадку node.js це робиться з циклом подій), який потім викликає ваш зворотний дзвінок, який друкує повідомлення журналу.
"Відкладена" частина просто означає, що функція зворотного дзвінка не викликається відразу; виклик його відкладається до відповідного часу. У випадку асинхронних функцій, як у багатьох з node.js, даний зворотний виклик, як правило, викликається, коли операція завершується (або виникає помилка).
Більшість матеріалів є async у node.js, але у браузері, наприклад, jQuery, більшість матеріалів насправді є синхронним (за винятком, очевидно, для запитів AJAX). Оскільки функції першого класу настільки зручні в JavaScript (особливо через велику підтримку закриття), зворотні виклики також використовуються скрізь у браузері, але вони не "відкладені" для синхронних операцій (за винятком тих випадків, коли їх не викликають відразу ви, але пізніше за функцією, яку ви викликаєте).
Той факт, що базова система керується подіями, є ортогональним для використання відкладених зворотних викликів; ви можете уявити собі (дуже повільну) версію node.js, яка запускала потік для кожної операції, а потім викликала даний зворотний виклик, коли потік закінчив свою роботу, не використовуючи подій взагалі. Звичайно, це жахлива модель, але вона ілюструє мою думку :-)
Deferredоб’єкти jQuery ? Це щось про специфічне для Node.js?