Если браузер выполняет JavaScript на веб-странице, и он встречает недействительный JavaScript (например, somerandomthingy;) Выполняется ли выполнение JavaScript в этой точке или продолжаются асинхронные операции. Также выполняются события JavaScript (например, onclick).
Выполняется ли выполнение javascript, когда встречается недопустимая строка?
Ответ 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: #
Иногда, однако, материал будет просто терпеть неудачу без ошибок или предупреждений, особенно если вы используете 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, хотя.