Вопросы «почему» всегда трудны, потому что вы можете догадаться, почему дизайнеры могли принять решения, которые они приняли, но обычно невозможно получить историческое подтверждение их рассуждений. Если вы хотите исследовать историю, архивы рабочей группы доступны по адресу https://lists.w3.org/Archives/Public/public-xsl-query/, но средства поиска не особенно хороши, так что вам придется сократить свою работу. Но даже если вы найдете соответствующее обсуждение в протоколе, оно, вероятно, будет записывать только решение, а не подробные аргументы.
XSLT 1.0 не позволил повторно объявить локальные переменные, и мне кажется, Напомним, что люди XSL вообще были против этого, в то время как люди XQuery были в целом за. Есть аргументы в обе стороны. Основным аргументом для его разрешения, вероятно, является аргумент «без ненужных ограничений»: вы не запрещаете что-либо, если оно имеет четко определенную семантику. Аргумент за запрещение этого состоял в том, что люди, вероятно, злоупотребят и неправильно поймут это; они думают, что две переменные должны как-то быть связаны, если они имеют одинаковое имя.
Аналогия Javascript не особенно хороша, потому что переменные в процедурном языке довольно сильно отличаются от переменных в функционале language.
Многие другие языки позволяют двум локальным переменным иметь одинаковые имена, если они имеют разную область видимости.