aboutsummaryrefslogtreecommitdiff
path: root/files/ru/web/javascript/reference/errors/strict_non_simple_params/index.html
blob: 3754648fe4cf8b9a4752c98e322ef3f360b821c6 (plain)
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
---
title: 'SyntaxError: "use strict" not allowed in function with non-simple parameters'
slug: Web/JavaScript/Reference/Errors/Strict_Non_Simple_Params
translation_of: Web/JavaScript/Reference/Errors/Strict_Non_Simple_Params
---
<div>{{jsSidebar("Errors")}}</div>

<h2 id="Сообщение">Сообщение</h2>

<p> </p>

<pre>Edge:
Cannot apply strict mode on functions with non-simple parameter list

Firefox:
SyntaxError: "use strict" not allowed in function with default parameter
SyntaxError: "use strict" not allowed in function with rest parameter
SyntaxError: "use strict" not allowed in function with destructuring parameter

Chrome:
SyntaxError: Illegal 'use strict' directive in function with non-simple parameter list</pre>

<p>Перевод:</p>

<pre class="syntaxbox">Edge:
Не удаётся применить строгий режим к функциям со списком, содержащим сложные параметры

Firefox:
Ошибка синтаксиса: "use strict" не допускается в функции с параметром по умолчанию
Ошибка синтаксиса: "use strict" не допускается в функции с rest параметром
Ошибка синтаксиса: "use strict" не допускается в функции с параметром, использующим деструктуризацию

Chrome:
Ошибка синтаксиса: недопустимая директива 'use strict' в функции со списком, содержащим сложные параметры
</pre>

<h2 id="Тип_ошибки">Тип ошибки</h2>

<p>{{jsxref("SyntaxError")}}.</p>

<h2 id="Что_пошло_не_так">Что пошло не так?</h2>

<p>Директива <code>"use strict"</code> была использована в верхней части функции, которая имеет один из следующих параметров:<br>
  </p>

<ul>
 <li>{{jsxref("функции/Default_parameters", "параметры по умолчанию", "", 1)}}</li>
 <li>{{jsxref("функции/rest_parameters", "остальные параметры", "", 1)}}</li>
 <li>{{jsxref("операторы/Destructuring_assignment", "деконструкция параметров", "", 1)}}</li>
</ul>

<p>Директива "use strict" не допускается в верхней части таких функций согласно спецификации ECMAScript.</p>

<h2 id="Примеры">Примеры</h2>

<h3 id="Функция_заявления">Функция заявления</h3>

<p>В этом случае функция sum имеет параметры по умолчанию a=1 и b=2:</p>

<pre class="brush: js example-bad">function sum(a = 1, b = 2) {
  //SyntaxError: использовать "use strict" не разрешено в функции с параметром по умолчанию
  'use strict';
  return a + b;
}
</pre>

<p>Если функция должна находиться в строгом режиме, и весь скрипт или заключающая функция также в порядке, чтобы быть в строгом режиме, вы можете переместить директиву "use strict" за пределы функции:</p>

<pre class="brush: js example-good">'use strict';
function sum(a = 1, b = 2) {
  return a + b;
}
</pre>

<h3 id="Функция_выражения">Функция выражения</h3>

<p>Выражение функции может использовать ещё один обходной путь:</p>

<pre class="brush: js example-bad">var sum = function sum([a, b]) {
  // SyntaxError: "use strict" не допускается в функции с параметром деструктурирования
  'use strict';
  return a + b;
};
</pre>

<p>Это может быть преобразовано в следующее выражение:</p>

<pre class="brush: js example-good">var sum = (function() {
  'use strict';
  return function sum([a, b]) {
    return a + b;
  };
})();
</pre>

<h3 id="Указательная_функция">Указательная функция</h3>

<p>Если функция со стрелкой должна получить доступ к переменной this, можно использовать функцию со стрелкой в качестве функции включения:</p>

<pre class="brush: js example-bad">var callback = (...args) =&gt; {
  // SyntaxError: "use strict" не допускается в функции с параметром rest
  'use strict';
  return this.run(args);
};
</pre>

<p>Это может быть преобразовано в следующее выражение:</p>

<pre class="brush: js example-good">var callback = (() =&gt; {
  'use strict';
  return (...args) =&gt; {
    return this.run(args);
  };
})();
</pre>

<h2 id="Смотрите_также">Смотрите также</h2>

<ul>
 <li>{{jsxref("Strict_mode", "строгий режим", "", 1)}}</li>
 <li>{{jsxref("Ведомости/функция", "оператор function", "", 1)}}</li>
 <li>{{jsxref("операторы/функции", "свободное выражение функции", "", 1)}}</li>
 <li>{{jsxref("функции/Default_parameters", "параметры по умолчанию", "", 1)}}</li>
 <li>{{jsxref("функции/rest_parameters", "остальные параметры", "", 1)}}</li>
 <li>{{jsxref("операторы/Destructuring_assignment", "деконструкция параметры", "", 1)}}</li>
</ul>