aboutsummaryrefslogtreecommitdiff
path: root/files/fr/web/javascript/reference/errors/strict_non_simple_params/index.md
blob: 22d30809a4983d005f8b0baa9a15c0e7078a1f0a (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
---
title: 'SyntaxError: "use strict" not allowed in function with "x" parameter'
slug: Web/JavaScript/Reference/Errors/Strict_Non_Simple_Params
tags:
  - Erreurs
  - JavaScript
  - Reference
  - TypeError
translation_of: Web/JavaScript/Reference/Errors/Strict_Non_Simple_Params
original_slug: Web/JavaScript/Reference/Erreurs/Strict_Non_Simple_Params
---
{{jsSidebar("Errors")}}

## Message

    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

## Type d'erreur

{{jsxref("SyntaxError")}}.

## Quel est le problème ?

Une directive `"use strict"` apparaît au début d'une fonction qui possède l'un des paramètres suivants :

- {{jsxref("Fonctions/Valeurs_par_défaut_des_arguments", "Des paramètres par défaut", "", 1)}}
- {{jsxref("Fonctions/paramètres_du_reste", "Des paramètres du reste", "", 1)}}
- {{jsxref("Opérateurs/Affecter_par_décomposition", "Des paramètres décomposés", "", 1)}}

Selon la spécification ECMAScript, une directive `"use strict"` ne peut pas être utilisée pour de telles fonctions.

## Exemples

### Déclaration de fonction

Dans l'exemple qui suit, la fonction `somme` possède deux paramètres par défaut `a=1` et `b=2`.

```js example-bad
function somme(a = 1, b = 2) {
  // SyntaxError: "use strict" not allowed in function with default parameter
  "use strict";
  return a + b;
}
```

Si on veut que la fonction soit en mode strict et que le script entier ou que la fonction englobante peut être en mode strict, il suffira de déplacer l'instruction `"use strict"` en dehors du corps de la méthode.

```js example-good
"use strict";
function somme(a = 1, b = 2) {
  return a + b;
}
```

### Expression de fonction

Il est également possible d'utiliser les expressions de fonction pour résoudre ce problème :

```js example-bad
var somme = function somme([a, b]) {
  // SyntaxError: "use strict" not allowed in function with destructuring parameter
  "use strict";
  return a + b;
};
```

On peut convertir le fragment de code précédent avec l'expression suivante :

```js example-good
var somme = (function() {
  "use strict";
  return function somme([a, b]) {
    return a + b;
  };
})();
```

### Fonction fléchée

Si on a une fonction fléchée qui doit accéder à la variable `this` on peut utiliser une fonction fléchée comme fonction englobante :

```js example-bad
var callback = (...args) => {
  // SyntaxError: "use strict" not allowed in function with rest parameter
  "use strict";
  return this.run(args);
};
```

This can be converted into following expression.

```js example-good
var callback = (() => {
  "use strict";
  return (...args) => {
    return this.run(args);
  };
})();
```

## Voir aussi

- {{jsxref("Strict_mode", "Le mode strict", "", 1)}}
- {{jsxref("Instructions/function", "L'instruction function", "", 1)}}
- {{jsxref("Op%C3%A9rateurs/L_op%C3%A9rateur_function", "Les expressions de fonction", "", 1)}}
- {{jsxref("Fonctions/Valeurs_par_d%C3%A9faut_des_arguments", "Les paramètres par défaut", "", 1)}}
- {{jsxref("Fonctions/paramètres_du_reste", "Les paramètres du reste", "", 1)}}
- {{jsxref("Opérateurs/Affecter_par_décomposition", "Les paramètres décomposés", "", 1)}}