Как отработает?

Если в setTimeout передать большое значение, например Number.MAX_VALUE, то через какое время сработает таймер, как вы думаете?

setTimeout(f => console.log('done'), Number.MAX_VALUE)

Значение выведется точно так же, как если бы вы передали 0 (ноль). А что если передать бесконечность?

setTimeout(f => console.log('done'), Infinity)

Точно такое же поведение.

Бага?

Ну как сказать. Просто setTimeout принимает в качестве второго аргумента int 32 значение. Если вы передадите 2147483647, то код отработает через 2147483647 милисекунд:

setTimeout(f => console.log('done'), 2147483647)

Если я не ошибся в математике, то это где-то 596 часов. Но вот если вы передадите число: 2147483647+1, то результат получим мгновенно:

setTimeout(f => console.log('done'), 2147483648)

Никаких ошибок. Вот такая вот канитель и трололо. Но это не максимальное число. Максимальное число, с которым будет работать setTimeout — это 49999861776383. Почему?

Как я понял, где-то в недрах реализации происходит следующая операция — беззнаковый сдвиг вправо:

49999861776383 >>> 0 === 2147483647

Таким образом получаем:

setTimeout(f => console.log('done'), 49999861776383) // сработает как 2147483647