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

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

❌ Uncaught SyntaxError: missing ) after argument list

Вро­де бы напи­са­но, что не хва­та­ет закры­ва­ю­щей скоб­ки. Вы про­ве­ря­е­те — все скоб­ки на месте. Про­ве­ря­е­те осталь­ное — кажет­ся, что всё в поряд­ке, пото­му что вы так дела­ли сот­ни раз и всё рабо­та­ло.

Что это зна­чит: интер­пре­та­тор дей­стви­тель­но счи­та­ет, что у вас есть неза­кры­тая скоб­ка, но при­чин у него так счи­тать на самом деле может быть очень мно­го.

Когда встре­ча­ет­ся: есть одна общая деталь — в син­так­си­се есть ошиб­ка, но не кри­тич­ная, из-за кото­рой пада­ет скрипт, а мел­кая, почти неза­мет­ная. Вот её и будем ловить.

При­мер: обра­бот­чик jQuery

    
language: JavaScript
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. Посчи­тай­те, все ли пара­мет­ры вы пере­да­ё­те при вызо­ве. Воз­мож­но, вы пыта­е­тесь пере­дать в функ­цию что-то лиш­нее, напри­мер, три пара­мет­ра вме­сто двух.

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

    
language: JavaScript
$(document).ready(function(){

    $("#anim").parents().eq(1).hover(

     function() {

      $(this).addClass('animated bounce');

     },

 

     function() {

      $(this).removeClass('animated bounce');

     },

 

     function() {

     $(this).css('animation-duration',3s);   // ❌ говорит, что тут ошибка

     });

});


Ско­пи­ро­вать код
Код ско­пи­ро­ван
    
language: JavaScript
$.each(elements, fucntion(index, val){  // ❌ говорит, что тут ошибка

            console.log(index);

            console.log(val);

        });


Ско­пи­ро­вать код
Код ско­пи­ро­ван