Что означает ошибка SyntaxError: missing ) after formal parameters

Ситу­а­ция: в про­грам­ме вам пона­до­би­лось слу­чай­ное чис­ло, и вы хоти­те выве­сти его зна­че­ние в консоль:

console.log('Держите случайное число: ' Math.random());

Вме­сто него бра­у­зер выда­ёт ошибку:

❌ SyntaxError: missing ) after formal parameters

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

В нашем слу­чае про­бле­ма в том, что мы не поста­ви­ли знак сло­же­ния меж­ду стро­кой и переменной.

  1. Бра­у­зер по скоб­кам понял, что console.log() — это функция.
  2. Нашёл стро­ку 'Дер­жи­те слу­чай­ное число: '.
  3. Понял, что с ней боль­ше ниче­го не нуж­но делать, пото­му что после неё нет ника­ких команд рабо­ты со строками.
  4. Выяс­нил, что у console.log дол­жен быть толь­ко один пара­метр при вызове.
  5. Поис­кал закры­ва­ю­щую скоб­ку сра­зу после строки.
  6. Не нашёл её и выдал ошибку.

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

console.log('Держите случайное число: ' + Math.random());

Как исправить ошибку SyntaxError: missing ) after formal parameters

Что­бы ошиб­ка исчез­ла, вам нужно:

  1. Узнать, сколь­ко пара­мет­ров долж­но быть у функ­ции, с кото­рой вы работаете.
  2. Посчи­тать, сколь­ко пара­мет­ров вы пере­да­ё­те в функ­цию, и ниче­го ли не про­пу­ще­но при записи.
  3. Вни­ма­тель­но посмот­реть на стро­ки, кото­рые вы пере­да­ё­те. Часто быва­ет такое, что их забы­ва­ют сло­жить меж­ду собой или ста­вят не те кавычки.

По пово­ду кавы­чек раз­бе­рём чуть подроб­нее. Допу­стим, мы хотим напи­сать скрипт, кото­рый встав­ля­ет код в нуж­ное нам место на HTML-странице, полу­чая часть дан­ных из PHP:

$(".mfp-bottom-bar").prepend("<div class='hidden-xs'><?php if ($quantity <= 0 && $status ) { ?><button type='button' class='btn-instock' onclick="instock.add('<?php echo $product_id; ?>');" data-product-id='<?php echo $product_id; ?>'></div>");

Ошиб­ка тут в том, что всё, что нахо­дит­ся меж­ду двух пар­ных кавы­чек, вос­при­ни­ма­ет­ся как одна стро­ка. А нуж­ная нам функ­ция как раз и при­ни­ма­ет ров­но одну стро­ку как аргу­мент. Она встре­ча­ет откры­ва­ю­щие пар­ные кавыч­ки, пони­ма­ет, что перед ней стро­ка, нахо­дит закры­ва­ю­щие пар­ные кавыч­ки и не зна­ет, что делать с осталь­ным тек­стом. Про­бле­ма в том, что у нас в сере­дине стро­ки тоже есть двой­ные кавыч­ки, кото­рая функ­ция при­ни­ма­ет за закры­ва­ю­щие. Что­бы она их игно­ри­ро­ва­ла, кавыч­ки экра­ни­ру­ют слэ­шем:"\". Тогда функ­ция их про­пу­стит и будет ждать нор­маль­ные закры­ва­ю­щие кавычки:

$(".mfp-bottom-bar").prepend("<div class='hidden-xs'><?php if ($quantity <= 0 && $status ) { ?><button type='button' class='btn-instock' onclick=\"instock.add('<?php echo $product_id; ?>');\" data-product-id='<?php echo $product_id; ?>'></div>");

Попробуйте сами

Смо­же­те най­ти ошиб­ку в нашем коде?

var CircleOptions = {
  posBall: {
    x: 160,
    y: 180
  },
  radius: 40,
  angle: 80,
  velocityX: 1,
  velocityY: 1
};

function CircleCoordinates(CircleOptions.posBall.x, CircleOptions.posBall.y, CircleOptions.radius) {
  var left = CircleOptions.posBall.x - CircleOptions.radius,
    top = CircleOptions.posBall.y + CircleOptions.radius,
    right = CircleOptions.posBall.x + CircleOptions.radius,
    bottom = CircleOptions.posBall.y - CircleOptions.radius;
};
Текст:
Миха­ил Полянин
Редак­тор:
Миха­ил Полянин
Кор­рек­тор:
Ири­на Михеева
Иллю­стра­ция:
Вита­лий Вебер
Вёрст­ка:
Мария Дро­но­ва
Соц­се­ти и вот это всё:
Вита­лий Вебер
Не оши­бал­ся:
Роди­он Скрябин