Page 323 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 323
"интегрировали" значение в этот модуль. Давайте посмотрим, как мы могли бы реа
лизовать собственный модуль debug.
e
let lastM s sage ;
module . exports = function ( p refix )
return function (message ) {
const now = Date . n o ( ) ;
w
const s i nceLastMessage now - ( l astMessage 1 1 now) ;
console . l o ( ' $ { p refix } $ { message } +$ { s inceLastMessage } m s ' ) ;
g
s
la t Message = now;
Этот модуль экспортирует функцию, которая написана так, чтобы значение пере
менной prefix можно было использовать в модуле. Обратите внимание, что у нас
есть и другое значение, lastMessage, которое является временной меткой последне
го сообщения, которое было выведено; мы используем его, чтобы вычислить время
между сообщениями.
Этот фрагмент кода демонстрирует важный момент: что произойдет, если вы им
портируете модуль многократно? Рассмотрим, например, что происходит при импорте
самодельного модуля debug дважды.
const debugl require ( ' . / debug ' ) ( ' Перв ый ' ) ;
const debug2 require ( ' . / debug ' ) ( ' В торой ' ) ;
debugl ( з апущен первый отладчик ! ' )
'
dеЬug2 ( ' запущен второй отладчик ! ' )
setTimeout ( f unction ( ) {
debugl ( ' пpoшлo немного времени . . . ' ) ;
debug2 ( ' чтo случилось ? ' ) ;
} , 2 0 0 ) ;
Если вы ожидаете увидеть нечто такое:
Первый запущен первый отладчик ! + O ms
Второй запущен второй отладчик ! + O ms
Первый прошло немного времени . . . +200ms
Второй что случилось ? +20 0 ms
то я вас разочарую. На самом деле вы увидите это (плюс или минус несколько мил
лисекунд).
Первый запущен первый отладчик ! + O ms
Второй запущен второй отладчик ! + O ms
Первый прошло немного времени . . . +200ms
Второй что случилось ? +Oms
326 Глава 20. Платформа Node

