Почему for(;;); вешает процесс?
Условие.
Выражение, выполняющееся на каждой интерации цикла. Если выражение истинно, цикл выполняется. Условие не является обязательным. Если его нет, условие всегда считается истиной. Если выражение ложно, выполнение переходит к первому выражению, следующему за for.MDN: for
Если посмотреть на стандарт, то обнаруживается, что в случае пустого условия (test) проверка на завершение цикла по условию не проводится вообще.1. Let V be undefined.
2. Perform ? CreatePerIterationEnvironment(perIterationBindings).
3. Repeat,
    a. If test is not [empty], then
          i. Let testRef be the result of evaluating test.
         ii. Let testValue be ? GetValue(testRef).
        iii. If ToBoolean(testValue) is false, return NormalCompletion(V).
    b. Let result be the result of evaluating stmt.
    c. If LoopContinues(result, labelSet) is false, return Completion(UpdateEmpty(result, V)).
    d. If result.[[Value]] is not empty, set V to result.[[Value]].
    e. Perform ? CreatePerIterationEnvironment(perIterationBindings).
    f. If increment is not [empty], then
          i. Let incRef be the result of evaluating increment.
         ii. Perform ? GetValue(incRef).