const EventEmitter = require('events');
const eventEmitter = new EventEmitter();
function test(txt, second){
function secondFunc(text){
setTimeout(() => {console.log(txt); eventEmitter.off('run', secondFunc)}, second);
}
return secondFunc;
}
eventEmitter.on('run', test('1', 5000));
eventEmitter.on('run', test('2', 1000));
eventEmitter.on('run', test('3', 7000));
eventEmitter.emit('run', new Date().getSeconds().toString()); //Вывод: 2,1,3
setTimeout(() => eventEmitter.emit('run', new Date().getSeconds().toString()), 3000); //Вывод: 1,3
setTimeout(() => eventEmitter.emit('run', new Date().getSeconds().toString()), 6000); //Вывод: 3
Что-то не могу на гуглить...
Как js уникализирует ссылки на функции secondFunc? Ведь, когда в eventEmitter.off передается текст и ссылка на функцию, то 'run' один и тот же, также как и название функции secondFunc, также как и название функции test. Как js понимает, какую именно ссылку удалить, когда всё одинаково? Хочу чуть лучше понять ссылочный тип)
Пока писал вопрос мысль возникла, что как-то через this, возможно, но буду рад за понятное разъяснение :)