явно будет переназначен на другое примитивное значение
На самом деле, нет. Когда компонент перерисовывается, функция выполняется снова, создавая новую область видимости, создавая новую count
переменную, которая не имеет ничего общего с предыдущей переменной.
Пример:
let _state;
let _initialized = false;
function useState(initialValue) {
if (!_initialized) {
_state = initialValue;
_initialized = true;
}
return [_state, v => _state = v];
}
function Component() {
const [count, setCount] = useState(0);
console.log(count);
setCount(count + 1);
}
Component();
Component(); // in reality `setCount` somehow triggers a rerender, calling Component again
Component(); // another rerender
Примечание: хуки намного сложнее и на самом деле не реализованы так. Это просто для демонстрации похожего поведения.