Uncaught SyntaxError: missing ) after argument list — что это значит
hard

Uncaught SyntaxError: missing ) after argument list — что это значит

Потрясающе хитрая ошибка.

Ситуация: вы пишете код, всё как обычно, запускаете скрипт и получаете ошибку:

❌ 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

Здесь сложно дать какую-то общую инструкцию, потому что каждый раз всё индивидуально и дело в нюансах, но мы попробуем.

  1. На всякий случай действительно проверьте, не потерялась ли у вас закрывающая скобка. Маловероятно, но всё-таки.
  2. Проверьте код на опечатки. Если пропустить букву в команде, то браузер может воспринимать её как новую функцию с кучей параметров, после которых должна всё-таки быть закрывающая скобка.
  3. Посмотрите, правильно ли вы используете параметры при вызове, нужны ли внутри точки, запятые или другие скобки.
  4. Если есть кавычки внутри кавычек — используйте разные кавычки для внутреннего и внешнего, например так: " Привет, это журнал 'Код' ".
  5. Посчитайте, все ли параметры вы передаёте при вызове. Возможно, вы пытаетесь передать в функцию что-то лишнее, например, три параметра вместо двух.

Попробуйте сами. Найдите ошибки в этих фрагментах кода:

$(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);
});

Обложка:

Даня Берковский

Корректор:

Ирина Михеева

Вёрстка:

Маша Климентьева

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Вам может быть интересно
hard