-
Notifications
You must be signed in to change notification settings - Fork 8k
/
index.md
79 lines (49 loc) · 3.05 KB
/
index.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
---
title: 'TypeError: "x" is not a function'
slug: Web/JavaScript/Reference/Errors/Not_a_function
---
{{jsSidebar("Errors")}}
## Сообщение
```
TypeError: "x" is not a function
```
## Тип ошибки
{{jsxref("TypeError")}}.
## Что пошло не так?
Была сделана попытка вызвать значение как функцию, но оно на самом деле не является функцией. Некоторый код ожидает, что вы предоставите функцию, но этого не происходит.
Возможно, есть ошибка в имени функции? Возможно, объект, метод которого вы вызываете, не содержит в себе этой функции? Для примера, JavaScript объекты не имеют `map` функции, а JavaScript Array - имеют.
Есть множество функций, нуждающихся в колбэк-функциях. Вы должны будете предоставить колбэк-функцию для того, чтобы эти методы работы правильно:
- Когда работаете с {{jsxref("Array")}} или {{jsxref("TypedArray")}} объектами:
- {{jsxref("Array.prototype.every()")}}, {{jsxref("Array.prototype.some()")}}, {{jsxref("Array.prototype.forEach()")}}, {{jsxref("Array.prototype.map()")}}, {{jsxref("Array.prototype.filter()")}}, {{jsxref("Array.prototype.reduce()")}}, {{jsxref("Array.prototype.reduceRight()")}}, {{jsxref("Array.prototype.find()")}}
- Когда работаете с {{jsxref("Map")}} и {{jsxref("Set")}} объектами:
- {{jsxref("Map.prototype.forEach()")}} и {{jsxref("Set.prototype.forEach()")}}
## Примеры
### Ошибки в имени функции
В данном случае, случающемся очень часто, есть опечатка в имени метода:
```js example-bad
var x = document.getElementByID("foo");
// TypeError: document.getElementByID is not a function
```
Корректное имя функции - `getElementById`:
```js example-good
var x = document.getElementById("foo");
```
### Функция вызвана с неверным объектом
Для некоторых методов вы должны предоставить колбэк-функцию, и она будет работать только на корректных объектах. В этом примере используется {{jsxref("Array.prototype.map()")}}, в котором {{jsxref("Array")}} будет работать только с массивами.
```js example-bad
var obj = { a: 13, b: 37, c: 42 };
obj.map(function (num) {
return num * 2;
});
// TypeError: obj.map is not a function
```
Использование с массивом:
```js example-good
var numbers = [1, 4, 9];
numbers.map(function (num) {
return num * 2;
});
// Array [ 2, 8, 18 ]
```
## Смотрите также
- [Functions](/ru/docs/Web/JavaScript/Reference/Functions)