Похоже, вы исходите из ошибочного предположения, что движок js смотрит на имена переменных, а не на их значения. Функции каждый раз разные, а имя не важно.
Для наглядности дадим этим функциям случайные имена и выведем их в консоль:
const EventEmitter = require('events');
const eventEmitter = new EventEmitter();
const myFuncs = {};
function test(txt, second){
const funcName = makeid(5);
myFuncs[funcName] = function(text){
setTimeout(() => {
console.log(txt);
eventEmitter.off('run', myFuncs[funcName]);
console.log('function ' + funcName + ' off');
}, second);
}
console.log('function ' + funcName + ' created');
return myFuncs[funcName];
}
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
// based at https://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript
function makeid(length) {
let result = '';
const characters = 'abcdef';
const charactersLength = characters.length;
let counter = 0;
while (counter < length) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
counter += 1;
}
return result;
}