You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
In the very first chapter about [variables](info:variables), we mentioned three ways of variable declaration:
4
+
Dans le tout premier chapitre qui parle des [variables](info:variables), nous avons mentionné trois façons pour déclarer une variable:
5
5
6
6
1.`let`
7
7
2.`const`
8
8
3.`var`
9
9
10
-
`let`and`const`behave exactly the same way in terms of Lexical Environments.
10
+
`let`et`const`agissent exactement de la même façon en ce qui concerne les environnements lexicaux (Lexical Environments).
11
11
12
-
But`var`is a very different beast, that originates from very old times. It's generally not used in modern scripts, but still lurks in the old ones.
12
+
Cependant,`var`est une bête d'une autre nature qui provient des temps très anciens. Ce n'est pas généralement utilisé dans les scripts modernes, mais elle peut se retrouver encore dans les anciens scripts.
13
13
14
-
If you don't plan on meeting such scripts you may even skip this chapter or postpone it, but then there's a chance that it bites you later.
14
+
Si vous ne planifiez pas rencontrer ces types de scripts, vous pouvez même sauter ce chapitre ou le remettre à plus tard, mais il y a une chance que cela peut vous causer des ennuis dans le futur.
15
15
16
-
From the first sight, `var`behaves similar to `let`. That is, declares a variable:
16
+
Au premier regard, `var`agit de manière similaire à `let`. C'est à dire, elle déclare une variable:
17
17
18
18
```js run
19
19
functionsayHi() {
20
-
var phrase ="Hello"; //local variable, "var" instead of "let"
20
+
var phrase ="Hello"; // variable locale, "var" au lieu de "let"
21
21
22
22
alert(phrase); // Hello
23
23
}
24
24
25
25
sayHi();
26
26
27
-
alert(phrase); //Error, phrase is not defined
27
+
alert(phrase); //Erreur, phrase n'est pas définie
28
28
```
29
29
30
-
...But here are the differences.
30
+
...mais voici les différences.
31
31
32
-
## "var" has no block scope
32
+
## "var" n'a pas de portée limitée aux blocs
33
33
34
-
`var`variables are either function-wide or global, they are visible through blocks.
34
+
Les variables `var`sont globales ou à l'échelle de la fonction. En d'autres mots, elles sont visibles à travers les blocs.
35
35
36
-
For instance:
36
+
Par exemple:
37
37
38
38
```js run
39
39
if (true) {
40
-
var test =true; //use "var" instead of "let"
40
+
var test =true; //utilise "var" au lieu "let"
41
41
}
42
42
43
43
*!*
44
-
alert(test); //true, the variable lives after if
44
+
alert(test); //vrai, la variable existe après if
45
45
*/!*
46
46
```
47
47
48
-
`var`ignores code blocks, so we've got a global variable `test`.
48
+
`var`ignore les blocs de code, alors nous avons une variable globale`test`.
49
49
50
-
If we used `let test`instead of `var test`, then the variable would only be visible inside`if`:
50
+
Si nous aurions utilisé `let test`au lieu de `var test`, la variable aurait seulement été visible à l'intérieur de`if`:
51
51
52
52
```js run
53
53
if (true) {
54
-
let test =true; //use "let"
54
+
let test =true; //utilise "let"
55
55
}
56
56
57
57
*!*
58
-
alert(test); //Error: test is not defined
58
+
alert(test); //Erreur: test n'est pas défini
59
59
*/!*
60
60
```
61
61
62
-
The same thing for loops: `var`cannot be block- or loop-local:
62
+
Même principe pour les boucles: `var`ne peut pas être locale pour les blocs ni les boucles :
63
63
64
64
```js
65
65
for (var i =0; i <10; i++) {
66
66
// ...
67
67
}
68
68
69
69
*!*
70
-
alert(i); // 10, "i" is visible after loop, it's a global variable
70
+
alert(i); // 10, "i" est visible après la boucle, c'est une variable globale
71
71
*/!*
72
72
```
73
73
74
-
If a code block is inside a function, then `var`becomes a function-level variable:
74
+
Si un bloc de code est à l'intérieur d'une fonction, `var`devient une variable à l'échelle de la fonction :
75
75
76
76
```js run
77
77
functionsayHi() {
78
78
if (true) {
79
79
var phrase ="Hello";
80
80
}
81
81
82
-
alert(phrase); //works
82
+
alert(phrase); //fonctionne
83
83
}
84
84
85
85
sayHi();
86
-
alert(phrase); //Error: phrase is not defined (Check the Developer Console)
86
+
alert(phrase); //Erreur : phrase n'est pas définie (vérifiez la console développeur)
87
87
```
88
88
89
-
As we can see, `var`pierces through `if`, `for`or other code blocks. That's because a long time ago in JavaScript blocks had no Lexical Environments. And`var`is a remnant of that.
89
+
Comme nous pouvons le constater, `var`pénètre à travers `if`, `for`ou autres blocs de code. C'est parce que, il y a longtemps, les blocs de JavaScript n'avaient pas d'environnements lexicaux. Et`var`est un vestige de ce dernier.
90
90
91
-
## "var" declarations are processed at the function start
91
+
## Les déclarations "var" sont traitées au début de la fonction
92
92
93
-
`var`declarations are processed when the function starts (or script starts for globals).
93
+
Les déclarations `var`sont traitées quand la fonction commence (ou quand le script commence pour le cas global).
94
94
95
-
In other words, `var`variables are defined from the beginning of the function, no matter where the definition is (assuming that the definition is not in the nested function).
95
+
En d'autres mots, les variables `var`sont définies au début de la fonction, peu importe où la définition se retrouve (présumant que la définition n'est pas dans une fonction imbriquée).
96
96
97
-
So this code:
97
+
Alors ce code:
98
98
99
99
```js run
100
100
functionsayHi() {
@@ -109,7 +109,7 @@ function sayHi() {
109
109
sayHi();
110
110
```
111
111
112
-
...Is technically the same as this (moved `var phrase`above):
...Or even as this (remember, code blocks are ignored):
127
+
...ou même ceci (souvenez-vous, les blocs de code sont ignorés):
128
128
129
129
```js run
130
130
functionsayHi() {
@@ -141,13 +141,13 @@ function sayHi() {
141
141
sayHi();
142
142
```
143
143
144
-
People also call such behavior "hoisting" (raising), because all `var`are "hoisted" (raised) to the top of the function.
144
+
Certains nomment ce comportement "hoisting" (hisser) parce que toutes les `var`sont "hoisted" (hissées) jusqu'en haut de la fonction.
145
145
146
-
So in the example above, `if (false)`branch never executes, but that doesn't matter. The`var`inside it is processed in the beginning of the function, so at the moment of `(*)` the variable exists.
146
+
Alors dans l'exemple au dessus, la branche `if (false)`n'est jamais exécutée, mais ce n'est pas grave. La`var`à l'intérieur de cette branche est traitée au début de la fonction, alors au moment `(*)`, la variable existe.
147
147
148
-
**Declarations are hoisted, but assignments are not.**
148
+
**Les déclarations sont hissées, mais les affectations ne le sont pas.**
149
149
150
-
That's better to demonstrate with an example, like this:
150
+
Il convient mieux de démontrer cet énoncé avec un exemple, comme celui ci :
151
151
152
152
```js run
153
153
functionsayHi() {
@@ -161,40 +161,40 @@ function sayHi() {
161
161
sayHi();
162
162
```
163
163
164
-
The line`var phrase = "Hello"`has two actions in it:
164
+
La ligne`var phrase = "Hello"`contient deux actions :
165
165
166
-
1.Variable declaration`var`
167
-
2.Variable assignment`=`.
166
+
1.Déclaration de la variable`var`
167
+
2.Affectation de la variable`=`.
168
168
169
-
The declaration is processed at the start of function execution ("hoisted"), but the assignment always works at the place where it appears. So the code works essentially like this:
169
+
La déclaration est traitée au début de l'exécution de la fonction ("hoisted"), mais l'affectation fonctionne toujours à l'endroit où elle apparaît. Essentiellement, le code fonctionne comme ceci :
170
170
171
171
```js run
172
172
functionsayHi() {
173
173
*!*
174
-
var phrase; //declaration works at the start...
174
+
var phrase; //déclaration fonctionne au début...
175
175
*/!*
176
176
177
177
alert(phrase); // undefined
178
178
179
179
*!*
180
-
phrase ="Hello"; // ...assignment - when the execution reaches it.
180
+
phrase ="Hello"; // ...affectation - quand l'exécution y parvient.
181
181
*/!*
182
182
}
183
183
184
184
sayHi();
185
185
```
186
186
187
-
Because all `var`declarations are processed at the function start, we can reference them at any place. But variables are undefined until the assignments.
187
+
Parce que toutes les déclarations `var`sont traitées au début de la fonction, nous pouvons y faire référence n'importe où. Mais les variables sont indéfinies jusqu'aux affectations.
188
188
189
-
In both examples above `alert`runs without an error, because the variable `phrase`exists. But its value is not yet assigned, so it shows`undefined`.
189
+
Dans les deux exemples au dessus, `alert`fonctionne sans erreur parce que la variable `phrase`existe. Mais sa valeur n'est pas encore affectée, alors cela donne`undefined`.
190
190
191
-
## Summary
191
+
## Résumé
192
192
193
-
There are two main differences of `var`compared to`let/const`:
193
+
Il y a deux différences majeures entre `var`et`let/const`:
194
194
195
-
1.`var`variables have no block scope, they are visible minimum at the function level.
196
-
2.`var`declarations are processed at function start (script start for globals).
195
+
1.Les variables `var`n'ont pas de portée limitée aux blocs. Elles sont, au minimum, visibles au niveau de la fonction.
196
+
2.Les déclarations `var`sont traitées au début de la fonction (ou au début du script pour le cas global).
197
197
198
-
There's one more minor difference related to the global object, we'll cover that in the next chapter.
198
+
Il y a une autre différence mineure associée à l'objet global, mais nous traiterons ce point dans le prochain chapitre.
199
199
200
-
These differences make`var`worse than`let`most of the time. Block-level variables is such a great thing. That's why`let`was introduced in the standard long ago, and is now a major way (along with `const`) to declare a variable.
200
+
Ces différences rendent`var`pire que`let`dans la plupart des cas. Les variables au niveau des blocs sont extraordinaires. C'est pourquoi`let`a été introduit au standard il y a longtemps et c'est maintenant un moyen majeur (avec `const`) pour déclarer une variable.
0 commit comments