Антиотладочные приёмы для JS?
Радикальный метод - не выкладывать в сеть. Нужно будет - разберут и разложат все по полочкам. Не хотите этого - не выкладывайте
Я раз 10 слазил в подобный код.
Лично я не думаю что можно чисто со стороны клиента защитить код от подмены.
Тут нужна серверная которая будет "задачу" браузеру на которую у всех браузеров будет одит и тот же ответ. Если влезть в код то из-за неочевидности можно поймать но не ограничить на 100% ибо на ошибках учатся.
Если все на js и нужно чтобы его было сложнее проанализировать(не защитить на 99.99%) можно поступить так:
Заходит пользователь. Для него генерим прям в исходнике скрипта особый алгоритм(к примеру к ответу любого теста делать Math.ceil(id*1.12)). 
При любом запросе принимаем eval функцию с "задачей". 
При запросе отправляем ответ задачи + ту особую часть(именно суммируем или миксируем но ни в коем случае не соединяем строки).
Если достаточно ошибок то отправляем себе отчет, блочим юзера или еще чет.
В eval можно еще ориентироваться не только на текущий юзерспейс а на тот который был сгенерен прошлой задачей. Тут главное понимать какой скрипт в какой вкладке работает ибо будет много не состыковок и подобное вообще ток ради эксперимента можно попробовать, не более.