Приведенный код отвратительный. И не удивительно, что он виснет.
Сначала задается значение атрибута href новым значением, а потом проверяется равно ли значение ссылки этому значению. Возможно так задумано, но a.href будет равен "
mysite.ru/newlink", а не "/newlink". И скорее всего там должно быть a.getAttribute("href") !== "/newlink".
Поэтому срабатывает условие. Обсервер слушает изменения атрибутов, а функция изменяет те атрибуты, которые слушаются. Тем самым запускает бесконечный цикл вызовов функции обсервера и изменения атрибута.
А еще в html не закрыты теги.
https://jsfiddle.net/vvk6g370/