Ответ 1
Ответ на заголовок: Нет
Ответьте на" Существуют ли различные ошибки в JavaScript **: Да, см. MDN: Error
Синтаксические ошибки предотвратят выполнение целого блока script, другие ошибки (TypeErrors, Reference errors) остановят выполнение только после возникновения ошибки.
Различные блоки <script>
выполняются отдельно. Вы не можете предотвратить выполнение второго блока, выбросив ошибку в первом блоке (Demo: http://jsfiddle.net/WJCEN/).
<script>Example: Syntax error in this script.</script>
<script>console.log('Still executed.')</script>
Кроме того, если ошибка обнаружена с помощью try-catch
(demo: http://jsfiddle.net/WJCEN/1/), тогда ошибка даже не остановит выполнение целый блок.
try {throw 'Code';}catch(e){}
console.log('Still executed');
Не существует общего метода one-fit-all, чтобы остановить запуск всего кода. Для отдельных сценариев вы можете использовать некоторые трюки, чтобы предотвратить дальнейшее выполнение кода.
Пример 1 (демонстрация): Временная перезапись метода
1: <script>window._alert = alert;alert=null;</script>
2: <script>alert('Some code!');confirm('Not executing');</script>
3: <script>alert=_alert;delete window._alert;alert('Done!');</script>
Этот метод основан на том, что script 2 ожидает, что alert
будет функцией. Мы переписали alert
на не-функциональное свойство (script 1). script 2 выбрасывает a TypeError
, а второй блок пропускается.
Мы восстанавливаем исходные значения в script 3.
Пример 2 (demo): Определите константный метод, который нельзя перезаписать.
4. <script>Object.defineProperty(window, 'test',{value:null});</script>
5. <script>var test=function(){alert('Test');};test();alert('What?');</script>
Этот метод основан на методе Object.defineProperty
, чтобы эффективно определять постоянное значение. В строгом режиме объявление var test
выдаст TypeError: "test доступен только для чтения".
Когда строгий режим не включается, TypeError будет сброшен в test()
: "test не является функцией" (поскольку мы определили test
как константу, в script 4).
Примечание. Последний метод работает некорректно с объявлениями функций (см. ошибка # 115452, Chrome 17)