Ситуация: вы пишете код, всё как обычно, запускаете скрипт и получаете ошибку:
❌ Uncaught SyntaxError: missing ) after argument list
Вроде бы написано, что не хватает закрывающей скобки. Вы проверяете — все скобки на месте. Проверяете остальное — кажется, что всё в порядке, потому что вы так делали сотни раз и всё работало.
Что это значит: интерпретатор действительно считает, что у вас есть незакрытая скобка, но причин у него так считать на самом деле может быть очень много.
Когда встречается: есть одна общая деталь — в синтаксисе есть ошибка, но не критичная, из-за которой падает скрипт, а мелкая, почти незаметная. Вот её и будем ловить.
Пример: обработчик jQuery
jQuery('document').ready(function () {
jQuery('button').on('click'.function(){
var value1, value2 ;
value1 = jQuery('#val1').val();
value2 = jQuery('#val2').val();
alert(value1 + value2);
});
});
При запуске браузер будет ругаться на строчку jQuery('button').on('click'.function(){
и выдавать ошибку Uncaught SyntaxError: missing ) after argument list.
Но дело не в скобке — у нас с ними всё в порядке. Дело в том, что в этом примере программист поставил точку после'click'
, хотя там нужна запятая. А если стоит точка, то браузер воспринимает function как свойство, пытается с ним разобраться, понимает, что это какое-то очень длинное свойство, которое не заканчивается закрывающей скобкой. Отсюда и просьба про скобку.
Точно так же браузер может реагировать на опечатки в названиях, пропущенные точки, неправильные кавычки и так далее. В общем, чаще всего эта ошибка говорит о том, что нужно максимально сосредоточиться и проверить каждый символ в строке с ошибкой.
Что делать с ошибкой Uncaught SyntaxError: missing ) after argument list
Здесь сложно дать какую-то общую инструкцию, потому что каждый раз всё индивидуально и дело в нюансах, но мы попробуем.
- На всякий случай действительно проверьте, не потерялась ли у вас закрывающая скобка. Маловероятно, но всё-таки.
- Проверьте код на опечатки. Если пропустить букву в команде, то браузер может воспринимать её как новую функцию с кучей параметров, после которых должна всё-таки быть закрывающая скобка.
- Посмотрите, правильно ли вы используете параметры при вызове, нужны ли внутри точки, запятые или другие скобки.
- Если есть кавычки внутри кавычек — используйте разные кавычки для внутреннего и внешнего, например так:
" Привет, это журнал 'Код' "
. - Посчитайте, все ли параметры вы передаёте при вызове. Возможно, вы пытаетесь передать в функцию что-то лишнее, например, три параметра вместо двух.
Попробуйте сами. Найдите ошибки в этих фрагментах кода:
$(document).ready(function () {
$("#anim").parents().eq(1).hover(
function () {
$(this).addClass('animated bounce');
},
function () {
$(this).removeClass('animated bounce');
},
function () {
$(this).css('animation-duration', 3s); // ❌ говорит, что тут ошибка
});
});
$.each(elements, fucntion(index, val){ // ❌ говорит, что тут ошибка
console.log(index);
console.log(val);
});