Работа функции setTimeout

Кто-нибудь разобрался как работает функция SetTimeout в паре с clearTimeout? Я так до конца и не понял, надо ли обязательно выполнять очистку clearTimeout или достаточно переменной с номером функции присваивать значение null.

water_valve_timer_id = setTimeout(function() {
dev[“wb-gpio”][“EXT1_R3A4”] = !dev[“Water_valve_switch”][“position”];
water_valve_timer_id = null;
}, valve_timeout_s * 1000);

В данном примере я так понимаю что удаления функции не происходит, а лишь обнуляется адрес функции. Мне кажется, что это не совсем то, но в примерах именно так и продемонстрировано. Нет ли засорения памяти в таком примере?

Можно не удалять (если только таймауты не создаются в большом количестве в цикле, например). После срабатывания сборщик мусора удалит функцию из памяти если на нее больше не было ссылок.

clearTimeout(water_valve_timer_id) просто отменяет ваш таймаут. Обычно его используют в реализациях throttle, debounce и т. п.