Мои знания JavaScript говорят мне, что "=" имеет меньший приоритет, чем логическое ИЛИ "||"вот почему вы получаете ReferenceError ..
делая это:
4 || (x = 5)
вы вообще не получаете ошибку
отредактировано: внимательно читаете ваш вопрос ... что выдействительно хочу знать, как работает синтаксический анализатор ... ну .. JS - интерпретируемый язык и пытается быть быстрым, поэтому ... когда он находит
true || destroyWorld() // will never be called.. actually..the parser will never read it
, когда я добавил круглые скобки, я увеличил приоритетцелое выражение ... оператор присваивания имеет один из самых низких
(проверьте ссылку в другом ответе)