Подтвердить что ты не робот

Выполняется ли выполнение javascript, когда встречается недопустимая строка?

Если браузер выполняет JavaScript на веб-странице, и он встречает недействительный JavaScript (например, somerandomthingy;) Выполняется ли выполнение JavaScript в этой точке или продолжаются асинхронные операции. Также выполняются события JavaScript (например, onclick).

4b9b3361

Ответ 1

Да, кроме асинхронных. http://jsfiddle.net/pimvdb/R4dfJ/3/

DIY:

var a = 1, b, c;

setTimeout(function() {
    b = 2;
    console.log('Running', a, b, c);
}, 1000);

somerandomthingy;

c = 3;

Неподготовлен ReferenceError: somerandomthingy не определен

Запуск 1 2 undefined

Итак:

  • a и b установлены
  • c не установлен
  • Тайм-аут все еще встречается

Что касается "onclick still work" - ну, если обработчик установлен в запущенном коде (то есть перед ошибкой), он делает это; в случае, если он помещен после кода ошибки, он не свяжет обработчик, поэтому события не будут работать.

Ответ 2

Это зависит от того, что вы делаете. Обычно все перестает выполняться, и, если вы используете смарт-браузер с консолью, будет зарегистрировано сообщение об ошибке (а иногда эти сообщения об ошибках полезны, даже, но не всегда).

UNCAUGHT EXCEPTION: SYNTAX ERROR, UNRECOGNIZED EXPRESSION: #

enter image description here

Иногда, однако, материал будет просто терпеть неудачу без ошибок или предупреждений, особенно если вы используете jQuery или другую библиотеку. Я потратил много времени на устранение неполадок, почему что-то отлично работало в WebKit и Firefox, но тихо провалилось в IE, и проследил виновника ошибки PEBCAK в методе jQuery.append(), который пытался вставить в DOM некорректный HTML. Это было безумным, потому что все остальное работало нормально, никаких ошибок, никаких предупреждений, ничего, но в IE, что одна функция просто не "идет".

Ответ 3

За ошибкой не выполняется код.

function inAFunction(){
 alert("one");
 x = y;
 alert("two");  
}
inAFunction();

вы увидите "один", но не "два"

alert("one");
x = y;
alert("two");

вы увидите "один", но не "два"

var a = {
    b : c
}
alert("here");

вы ничего не увидите.

Ответ 4

Я думаю, что выполнение прекращается. Если вы установите предупреждение после разрыва строки кода, вы не достигнете предупреждения, что заставляет меня думать, что выполнение прекращается. Я не уверен, что то же самое относится к asynch XmlHtttpRequests, хотя.