Задать вопрос
@Evelate

Как js понимает, какую именно ссылку удалить в EventEmmiter?

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, возможно, но буду рад за понятное разъяснение :)
  • Вопрос задан
  • 122 просмотра
Подписаться 1 Средний 1 комментарий
Решение пользователя Inviz Custos К ответам на вопрос (2)
MvcBox
@MvcBox
Software Engineer [C/C++/JS(for Node.js)/etc]
При каждом вызове test создается новый экземпляр функции secondFunc.64ca9dc9ad32c372704924.jpeg
Ответ написан