recursal/MDN huggingface dataset:
SyntaxError: missing formal parameter( отсутствует формальный параметр)
=======================================================================

Сообщение
---------
```

SyntaxError: идентификатор начинается сразу после числового литерала
```

Тип ошибки
----------

`SyntaxError`Что пошло не так?
-----------------

"Формальный параметр" - это причудливый способ сказать "параметр функции". В объявлении функции отсутствуют допустимые параметры. В объявлении функции параметры должны быть identifiers, не любое значение, как числа, строки или объекты. Объявление функций и вызов функций - это два отдельных шага. Объявления требуют идентификатор в качестве параметров, и только при вызове (призыва) функции, вы предоставляете значения, которые функция должна использовать.

В JavaScript, идентификаторы могут содержать только буквенно-цифровые символы (или "$" или "\_") и не могут начинаться с цифры. Идентификатор отличается от строки тем, что строка является данными, а идентификатор - частью кода.

Примеры
-------

Параметры функции должны быть идентификаторами при настройке функции. Все эти объявления функций, которые обеспечивают значения их параметров:


```js
function square(3) {
  return number \* number;
};
// SyntaxError: отсутствует формальный параметр

function greet("Howdy") {
  return greeting;
};
// SyntaxError: отсутствует формальный параметр

function log({ obj: "value"}) {
  console.log(arg)
};
// SyntaxError: отсутствует формальный параметр
```


В объявлениях функций необходимо использовать идентификаторы:


```js
function square(number) {
  return number \* number;
}

function greet(greeting) {
  return greeting;
}

function log(arg) {
  console.log(arg);
}
```


Затем можно вызвать эти функции с аргументами, которые вам нравятся:


```js
square(2); // 4

greet("Howdy"); // "Howdy"

log({ obj: "value" }); // Object { obj: "value" }
```

Смотрите также
--------------

* Другие ошибки, касающиеся формальных параметров:
    + SyntaxError: Malformed formal parameter (en-US)
    + SyntaxError: redeclaration of formal parameter "x"
TypeError: property "x" is non-configurable and can't be deleted(свойство "x" не настраивается и не может быть удалено)
=======================================================================================================================

Сообщение
---------
```

TypeError: вызов delete на 'x' не разрешён в строгом режиме (Edge)
TypeError: свойство "x" не настраивается и не может быть удалено. (браузер Firefox)
TypeError: не удаётся удалить свойство "x" из #<Object> (Chrome)
```

Тип ошибки
----------

`TypeError` in strict mode only.

Что пошло не так?
-----------------

Была сделана попытка удалить свойство, но это свойство не изменяется. Настраиваемый атрибут определяет, можно ли удалить свойство из объекта и можно ли изменить его атрибуты (отличные от доступных для записи).

Эта ошибка возникает только в коде строгого режима. В нестрогом коде операция возвращает false.

Примеры
-------

Не настраиваемые свойства не очень распространены, но их можно создать с помощью `Object.defineProperty()` или `Object.freeze()`.


```js
"use strict";
var obj = Object.freeze({ name: "Elsa", score: 157 });
delete obj.score; // TypeError

("use strict");
var obj = {};
Object.defineProperty(obj, "foo", { value: 2, configurable: false });
delete obj.foo; // TypeError

("use strict");
var frozenArray = Object.freeze([0, 1, 2]);
frozenArray.pop(); // TypeError
```


В JavaScript также встроено несколько настраиваемых свойств. Возможно, вы пытались удалить математическую константу.


```js
"use strict";
delete Math.PI; // TypeError
```

Смотрите также
--------------

* delete operator
* `Object.defineProperty()`
* `Object.freeze()`
SyntaxError: identifier starts immediately after numeric literal
================================================================

Исключение "identifier starts immediately after numeric literal" возникает, если имя переменной, свойства или функции начинается с цифры. По правилам имя может начинаться только с буквы, подчеркивания (\_) или знака доллара ($).

Сообщение
---------
```

SyntaxError: Unexpected identifier after numeric literal (Edge)
SyntaxError: identifier starts immediately after numeric literal (Firefox)
SyntaxError: Unexpected number (Chrome)
```

Тип ошибки
----------

`SyntaxError`Что не так?
-----------

Имена переменных, а также свойств и функций, называемые идентификаторами, должны соответствовать определённым правилам.

Идентификатор в JavaScript должен начинаться с буквы, символа подчёркивания (\_) или знака доллара ($) и не может начинаться с цифры. Цифрами (0-9) могут быть только второй и следующие символы.

Примеры
-------

### Имена переменных, начинающиеся с числовых литералов

Имена переменных не могут начинаться с цифер в JavaScript. Следующий код приведёт к ошибкам:


```js
var 1life = 'foo';
// SyntaxError: identifier starts immediately after numeric literal

var foo = 1life;
// SyntaxError: identifier starts immediately after numeric literal

alert(1.foo);
// SyntaxError: identifier starts immediately after numeric literal
```


Вы можете переназвать вашу переменную, чтобы избежать ведущего числа.


```js
var life1 = "foo";
var foo = life1;
```

Смотрите также
--------------

* Лексический синтаксис
* Грамматика и типы
SyntaxError: missing = in const declaration
===========================================

Сообщение
---------
```

SyntaxError: missing = in const declaration (Firefox)
SyntaxError: Missing initializer in const declaration (Chrome)
```

Тип ошибки
----------

`SyntaxError`Что пошло не так?
-----------------

Константа это значение, которое не может быть изменено программой в процессе своего выполнения. Оно не может меняться посредством повторного назначения, и не может быть переопределено. В JavaScript константы объявляются с использованием ключевого слова `const`. Инициализация для константы является обязательной; то есть вы должны указать значение сразу же при её объявлении (что имеет смысл, учитывая, что оно не может быть изменено позже).

Примеры
-------

### Отсутствие инициализатора константы

В отличие от `var` или `let`, вы должны указать значение при объявлении `const`. В противном случае возникнет ошибка:


```js
const COLUMNS;
// SyntaxError: missing = in const declaration
```

### Исправление ошибки

Существует несколько вариантов исправления этой ошибки. Проверьте, что должно быть достигнуто с помощью данной константы.

#### Добавление значения константы

Укажите значение константы при её объявлении.


```js
const COLUMNS = 80;
```


#### `const`, `let` или `var`?

Не используйте `const`, если вы не хотели объявить константу. Возможно, вы подразумевали объявление переменную с блочной областью видимости с помощью `let` или глобальную переменную с помощью `var`. Оба варианта не требуют начального значения.


```js
let columns;
```

Смотрите также
--------------

* `const`
* `let`
* `var`
ReferenceError: "x" is not defined
==================================

Сообщение
---------
```

ReferenceError: "x" is not defined
```

Тип ошибки
----------

`ReferenceError`.

Что пошло не так?
-----------------

Есть несуществующая переменная, которая ссылается куда-то. Эта переменная должна быть объявлена, или вам необходимо убедиться, что она доступна в вашем текущем скрипте или области исходного кода ( scope (en-US)).

> 
> \*\*Примечание:\*\*При использовании сторонних библиотек (такие как jQuery), убедитесь, что они загружаются до того, как вы используете переменные "$". Поместите тег `<script>` загружающий вашу библиотеку до того как вы будете использовать её.
> 
> 
> 

Примеры
-------

### Переменная не объявлена


```js
foo.substring(1); // ReferenceError: foo is not defined
```


Переменная "Foo" не определена где-либо. Она должна быть в какой-то строке, так чтобы `String.prototype.substring()` метод начал работать.


```js
var foo = "bar";
foo.substring(1); // "ar"
```

### Неправильная зона доступности

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


```js
function numbers() {
  var num1 = 2,
    num2 = 3;
  return num1 + num2;
}

console.log(num1); // ReferenceError num1 is not defined.
```


Тем не менее, функция может получить доступ ко всем переменным и функциям, определённым в области видимости, в которой она определена. Другими словами, функция, определённая в глобальной области может получить доступ ко всем переменным, определённым в глобальном масштабе.


```js
var num1 = 2,
  num2 = 3;

function numbers() {
  return num1 + num2;
}

console.log(num1); // 2
```

Смотрите также
--------------

* Scope (en-US) - область видимости
* Объявление переменных в руководстве по JavaScript
* Область видимости функций в руководстве по JavaScript
RangeError: repeat count must be less than infinity
===================================================

Сообщение
---------
```

RangeError: repeat count must be less than infinity and not overflow maximum string size (Firefox)

RangeError: Invalid count value (Chrome)
```

Тип ошибки
----------

`RangeError`Что пошло не так?
-----------------

Был использован метод `String.prototype.repeat()`, с параметром `count`, указывающим количество повторений строки. Параметр может принимать значения между 0 и положительной `Infinity`, и не может быть отрицательным числом. Диапазон допустимых значений может быть описан следующим образом: [0, + ∞).

Полученная строка также не может превышать максимальный размер строки, который может отличаться в различных движках JavaScript. В Firefox (SpiderMonkey) максимальный размер строки составляет 228 -1 (`0xFFFFFFF`).

Примеры
-------

### Неверно


```js
"abc".repeat(Infinity); // RangeError
"a".repeat(2 \*\* 28); // RangeError
```

### Верно


```js
"abc".repeat(0); // ''
"abc".repeat(1); // 'abc'
"abc".repeat(2); // 'abcabc'
"abc".repeat(3.5); // 'abcabcabc' (count will be converted to integer)
```

Смотрите также
--------------

* `String.prototype.repeat()`
InternalError: too much recursion
=================================

Сообщение
---------
```

InternalError: too much recursion
```

Тип ошибки
----------

`InternalError`.

Что пошло не так?
-----------------

Функция, вызывающая сама себя, называется *рекурсивной функцией*. В некотором смысле рекурсия аналогична циклу. Оба выполняют один и тот же код несколько раз, и оба требуют условия (чтобы избежать бесконечного цикла или, вернее, бесконечной рекурсии в этом случае). Когда функция вызывается рекурсивно слишком много раз или бесконечно, JavaScript выдаёт эту ошибку.

Примеры
-------

Функция выполняется рекурсивно 10 раз, в соответствии с условием выхода:


```js
function loop(x) {
  if (x >= 10) {
    // "x >= 10" это условие выхода
    return;
  }
  // do stuff
  loop(x + 1); // рекурсивный вызов
}
loop(0);
```


В условии установлено слишком большое значение, не будет работать:


```js
function loop(x) {
  if (x >= 1000000000000) return;
  // do stuff
  loop(x + 1);
}
loop(0);

// InternalError: too much recursion
```

Смотрите также
--------------

* Recursion (en-US)
* Рекурсия
TypeError: "x" has no properties
================================

Сообщение
---------
```

TypeError: Unable to get property {x} of undefined or null reference (Edge)
TypeError: null has no properties (Firefox)
TypeError: undefined has no properties (Firefox)
```

Тип ошибки
----------

`TypeError`.

Что пошло не так?
-----------------

У `null` и `undefined` нет свойств, к которым можно было бы обратиться.

Примеры
-------


```js
null.foo;
// TypeError: null has no properties

undefined.bar;
// TypeError: undefined has no properties
```

Смотрите также
--------------

* `null`
* `undefined`
SyntaxError: missing : after property id
========================================

Сообщение
---------
```

SyntaxError: missing : after property id
```

Тип ошибки
----------

`SyntaxError`Что пошло не так?
-----------------

При создании объекта с помощью инициализатора объекта, двоеточие (`:`) разделяет ключи и значения свойств объекта.


```js
var obj = { propertyKey: "value" };
```

Примеры
-------

### Двоеточие vs. знака равенства

Этот код не работает, потому что знак равенства не может быть использован при инициализации объекта.


```js
var obj = { propertyKey = 'value' };
// SyntaxError: missing : after property id
```


Корректно будет использовать двоеточие или квадратные скобки для назначения нового свойства после того, как объект уже был создан.


```js
var obj = { propertyKey: "value" };

// or alternatively

var obj = {};
obj["propertyKey"] = "value";
```

### Пустые свойства

Вы не можете создать пустые свойства, подобные этому:


```js
var obj = { propertyKey; };
// SyntaxError: missing : after property id
```


Если вам необходимо задать свойство без значения, то вы можете использовать `null`.


```js
var obj = { propertyKey: null };
```

### Вычисляемые свойства

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


```js
var obj = { 'b'+'ar': 'foo' };
// SyntaxError: missing : after property id
```


Поместите выражение в скобки `[]`:


```js
var obj = { ["b" + "ar"]: "foo" };
```

Смотрите также
--------------

* Инициализатор объекта
RangeError: invalid array length
================================

Сообщение
---------
```

RangeError: invalid array length (Firefox)
RangeError: Invalid array length (Chrome)
RangeError: Invalid array buffer length (Chrome)
```

Тип ошибки
----------

`RangeError`Что пошло не так?
-----------------

Ошибка, связанная с размером массива может произойти в следующих случаях:

* При создании `Array` или `ArrayBuffer`, размер оказался либо отрицательным, либо равным или превышающим 232, или
* при установке свойства `Array.length` значение оказалось либо отрицательным, либо равным или превышающим 232.

Поскольку свойство `length` в `Array` или `ArrayBuffer` представлено в виде беззнакового 32-битного целого числа (integer), значение этого свойства находится в диапазоне от 0 до 232-1.

В конструкторе (`new Array()`) первым аргументом является длина массива, поэтому при создании можно задать нужное значение. Так же, можно задать размер массива, обратившись к свойству `length` напрямую.

Примеры
-------


```js
new Array(Math.pow(2, 40));
new Array(-1);
new ArrayBuffer(Math.pow(2, 32));
new ArrayBuffer(-1);

let a = [];
a.length = a.length - 1; // установка длинны -1

let b = new Array(Math.pow(2, 32) - 1);
b.length = b.length + 1; // установка длинны 2^32
```



```js
[Math.pow(2, 40)]; // [ 1099511627776 ]
[-1]; // [ -1 ]
new ArrayBuffer(Math.pow(2, 32) - 1);
new ArrayBuffer(0);

let a = [];
a.length = Math.max(0, a.length - 1);

let b = new Array(Math.pow(2, 32) - 1);
b.length = Math.min(0xffffffff, b.length + 1);

// 0xffffffff является шестнадцатеричным представлением
// 2^32 - 1, которое также можно записать в виде (-1 >>> 0)
```

Смотрите также
--------------

* `Array`
* `Array.length`
* `ArrayBuffer`
TypeError: cannot use 'in' operator to search for 'x' in 'y'(не удаётся использовать 'in' оператор поиска для 'x' в 'y')
========================================================================================================================

Сообщения
---------
```

TypeError: недопустимый операнд в "in" (edge)
TypeError: правая часть 'in' должна быть объектом, есть 'x' (Firefox)
TypeError: невозможно использовать оператор 'in' для поиска 'x' в 'y' (Firefox, Chrome)
```

Тип ошибки
----------

`TypeError`Что пошло не так?
-----------------

Оператор in можно использовать только для проверки наличия свойства в объекте. Вы не можете искать в строках, числах или других примитивных типах.

Примеры
-------

### Поиск в строках

В отличие от других языков программирования (например, Python), поиск в строках с помощью оператора in невозможен.


```js
"Hello" in "Hello World";
// TypeError: cannot use 'in' operator to search for 'Hello' in 'Hello World'
```


Вместо этого вам нужно будет использовать`String.prototype.indexOf()`или примеры


```js
"Hello World".indexOf("Hello") !== -1;
// true
```

### Операнд не может быть `null` или `undefined`

Убедитесь, что объект, который вы осматриваете, на самом деле не `null` или `undefined`.


```js
var foo = null;
"bar" in foo;
// TypeError: не удаётся использовать оператор 'in' для поиска 'bar' в 'foo' (Chrome)
// TypeError: правая часть 'in' должна быть объектом, полученным null (Firefox)
```


Оператор in всегда ожидает объект.


```js
var foo = { baz: "bar" };
"bar" in foo; // false

"PI" in Math; // true
"pi" in Math; // false
```

### Поиск в Массивах

Будьте осторожны при использовании оператора для поиска `Array` объекты. the `in` оператор проверяет номер индекса, а не его значение.


```js
var trees = ["redwood", "bay", "cedar", "oak", "maple"];
3 in trees; // true
"oak" in trees; // false
```

See also
--------

* `in` operator
SyntaxError: "x" is a reserved identifier
=========================================

Сообщение
---------
```

SyntaxError: The use of a future reserved word for an identifier is invalid (Edge)
SyntaxError: "x" is a reserved identifier (Firefox)
SyntaxError: Unexpected reserved word (Chrome)
```

Тип ошибки
----------

`SyntaxError`Что пошло не так?
-----------------

Ключевые слова используются в качестве идентификаторов. Ключевые слова зарезервированные и в строгом и обычном режиме:

* `enum`

Следующие ключевые слова резервируются для кода, который выполняется только в строгом режиме (strict mode):

* `implements`
* `interface`
* `let`
* `package`
* `private`
* `protected`
* `public`
* `static`
Примеры
-------

### Строгий и нестрогий режимы резервирования ключевых строк

Идентификатор `enum` зарезервирован.


```js
var enum = { RED: 0, GREEN: 1, BLUE: 2 };
// SyntaxError: enum is a reserved identifier
```


Резервирование большего количества идентификаторов с использованием строгого режима.


```js
"use strict";
var package = ["potatoes", "rice", "fries"];
// SyntaxError: package is a reserved identifier
```


Вам необходимо переименовать следующие переменные.


```js
var colorEnum = { RED: 0, GREEN: 1, BLUE: 2 };
var list = ["potatoes", "rice", "fries"];
```

### Обновление старых браузеров

Например, если вы используете старый браузер, в котором ещё не реализована функция `let` или `class`, вам следует перейти на более новую версию браузера, которая поддерживает данные языковые функции.


```js
"use strict";
class DocArchiver {}

// SyntaxError: class is a reserved identifier
// (появится только в старых браузерах, например, Firefox 44 и старше)
```

Смотрите также
--------------

* Правильные имена переменных
TypeError: invalid assignment to const "x"(недопустимое назначение const "x")
=============================================================================

Сообщение
---------
```

TypeError: недопустимое назначение const "x" (Firefox)
TypeError: присвоение переменной константы. (Chrome)
TypeError: присвоение const (Edge)
TypeError: повторное объявление const 'x' (IE)
```

Тип ошибки
----------

`TypeError`Что пошло не так?
-----------------

Константа-это значение, которое не может быть изменено программой в обычном исполнении. Он не может быть изменён путём повторного назначения и не может быть повторно объявлен. В JavaScript, константы объявляются с помощью ключевого слова const.

Примеры
-------

### Недопустимое повторное объявление

Assigning a value to the same constant name in the same block-scope will throw.


```js
const COLUMNS = 80;

// ...

COLUMNS = 120; // TypeError: invalid assignment to const `COLUMNS'
```

### Решение проблемы

Есть несколько вариантов, чтобы исправить эту ошибку. Проверьте, что должно было быть достигнуто с рассматриваемой константой.

#### Переназовите

Если вы хотели объявить другую константу, выберите другое имя и переименовать. Это имя константы уже используется в этой области.


```js
const COLUMNS = 80;
const WIDE\_COLUMNS = 120;
```


#### `const`, `let` или `var`?

Не используйте const, если вы не хотели объявлять константу. Возможно, вы хотели объявить переменную в области блока с let или глобальную переменную с var.


```js
let columns = 80;

// ...

let columns = 120;
```


#### Обзор

Проверить, если вы находитесь в правильной области. Должна ли эта константа появиться в этой области или она должна была появиться в функции, например?


```js
const COLUMNS = 80;

function setupBigScreenEnvironment() {
  const COLUMNS = 120;
}
```

### `const` и неизменность

Объявление const создаёт ссылку только для чтения на значение. Это не означает, что значение, которое он содержит, является неизменяемым, просто идентификатор переменной не может быть переназначен. Например, если содержимое является объектом, это означает, что сам объект все ещё может быть изменён. Это означает, что нельзя изменить значение, хранящееся в переменной:


```js
const obj = { foo: "bar" };
obj = { foo: "baz" }; // TypeError: invalid assignment to const `obj'
```


Но можно изменить свойства в переменной:


```js
obj.foo = "baz";
obj; // Object { foo: "baz" }
```

Смотрите также
--------------

* `const`
* `let`
* `var`
SyntaxError: missing ; before statement
=======================================

Сообщение
---------
```

SyntaxError: Expected ';' (Edge)
SyntaxError: missing ; before statement (Firefox)
```

Тип ошибки
----------

`SyntaxError`.

Что пошло не так?
-----------------

Отсутствует точка с запятой (`;`). Инструкции JavaScript должны заканчиваться точкой с запятой. В некоторых случаях имеет место автоматическая вставка точки с запятой (ASI), но в данном случае необходимо её поставить, чтобы JavaScript мог правильно обработать исходный код.

Часто эта ошибка является следствием другой ошибки, например, некорректного экранирования строк или неправильного использования `var`. Кроме того, где-то может быть слишком много скобок. Тщательно проверьте синтаксис при возникновении этой ошибки.

Примеры
-------

### Неэкранированные строки

Эта ошибка может легко возникнуть, если не экранировать строку правильным образом, из-за чего JavaScript будет рассматривать это место как конец строки. Например:


```js
var foo = 'Tom's bar';
// SyntaxError: missing ; before statement
```


Можно использовать двойные кавычки или экранировать апостроф:


```js
var foo = "Tom's bar";
var foo = 'Tom\'s bar';
```

### Объявление свойств через var

**Нельзя** объявить свойство объекта или массива с помощью `var`.


```js
var obj = {};
var obj.foo = 'привет'; // SyntaxError missing ; before statement

var array = [];
var array[0] = 'всем'; // SyntaxError missing ; before statement
```


Ключевое слово `var` необходимо опустить:


```js
var obj = {};
obj.foo = "привет";

var array = [];
array[0] = "всем";
```

### Неправильные ключевые слова

При переходе с другого языка программирования частой проблемой является использование ключевых слов, которые в JavaScript имеют другое значение или ничего не означают.


```js
def print(info){
  console.log(info);
}; // SyntaxError missing ; before statement
```


Вместо `def` используйте `function`:


```js
function print(info) {
  console.log(info);
}
```

Смотрите также
--------------

* Автоматическая вставка точки с запятой (ASI)
* Инструкции JavaScript