Skip to content

Commit

Permalink
Merge branch 'main' into ja/prettier/mozilla/add-ons
Browse files Browse the repository at this point in the history
  • Loading branch information
queengooborg committed Jul 28, 2023
2 parents 80e9175 + 6cb0f57 commit 4817928
Show file tree
Hide file tree
Showing 1,342 changed files with 16,429 additions and 13,308 deletions.
9 changes: 2 additions & 7 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,12 @@ build/
/files/fr/web/css/justify-content/index.md
/files/fr/web/css/place-items/index.md
/files/fr/web/css/place-self/index.md
/files/fr/web/javascript/reference/global_objects/array/includes/index.md
/files/fr/web/javascript/reference/global_objects/intl/displaynames/of/index.md
/files/pt-br/learn/server-side/django/forms/index.md
/files/ru/learn/server-side/django/forms/index.md
/files/ru/learn/server-side/django/introduction/index.md
/files/ru/learn/html/introduction_to_html/the_head_metadata_in_html/index.md
/files/zh-cn/learn/css/howto/css_faq/index.md
/files/zh-cn/learn/server-side/django/forms/index.md

# A full pass on all Markdown files is being performed.
Expand All @@ -38,11 +39,7 @@ build/
/files/es/web/css/**/*.md
/files/es/web/javascript/reference/**/*.md

# fr
/files/fr/web/javascript/**/*.md

# ja
/files/ja/learn/javascript/**/*.md
/files/ja/mdn/**/*.md
/files/ja/web/api/**/*.md
/files/ja/web/css/**/*.md
Expand Down Expand Up @@ -91,6 +88,4 @@ build/
/files/zh-cn/web/api/**/*.md
/files/zh-cn/web/css/**/*.md
/files/zh-cn/web/html/**/*.md
/files/zh-cn/web/http/**/*.md
/files/zh-cn/web/javascript/reference/**/*.md
/files/zh-cn/web/svg/**/*.md
305 changes: 179 additions & 126 deletions files/fr/web/css/shorthand_properties/index.md

Large diffs are not rendered by default.

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
114 changes: 55 additions & 59 deletions files/fr/web/http/content_negotiation/index.md

Large diffs are not rendered by default.

155 changes: 78 additions & 77 deletions files/fr/web/javascript/closures/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,12 @@ Dans l'exemple suivant :
```js
function init() {
var nom = "Mozilla"; // nom est une variable locale de init
function afficheNom() { // afficheNom est une fonction interne de init
function afficheNom() {
// afficheNom est une fonction interne de init
console.log(nom); // ici nom est une variable libre (définie dans la fonction parente)
}
afficheNom();
};
}
init();
```

Expand Down Expand Up @@ -48,21 +49,21 @@ Ce code produit le même résultat que l'appel à `init()` étudié précédemme

Le code continue à fonctionner, ce qui peut paraître contre-intuitif au regard de la syntaxe utilisée. Usuellement, les variables locales d'une fonction n'existent que pendant l'exécution d'une fonction. Une fois que `creerFonction()` a fini son exécution, on aurait pu penser que la variable `nom` n'est plus accessible. Cependant, le code fonctionne : en JavaScript, la variable est donc accessible d'une certaine façon.

L'explication est la suivante : `maFonction` est une fermeture. La fermeture combine la fonction `afficheNom` et son environnement. Cet environnement est composé de toutes les variables locales accessibles (dans la portée) à la création de la fermeture. Ici `maFonction` est une fermeture qui contient la fonction `afficheNom` et une référence à la variable `var nom = "Mozilla"` qui existait lorsque la fermeture a été créée. L'instance de `afficheNom` conserve une référence à son environnement lexical, dans lequel `nom` existe. Pour cette raison, lorsque `maFonction` est invoquée, la variable `nom` reste disponible et "Mozilla" est transmis à `console.log`.
L'explication est la suivante : `maFonction` est une fermeture. La fermeture combine la fonction `afficheNom` et son environnement. Cet environnement est composé de toutes les variables locales accessibles (dans la portée) à la création de la fermeture. Ici `maFonction` est une fermeture qui contient la fonction `afficheNom` et une référence à la variable `var nom = "Mozilla"` qui existait lorsque la fermeture a été créée. L'instance de `afficheNom` conserve une référence à son environnement lexical, dans lequel `nom` existe. Pour cette raison, lorsque `maFonction` est invoquée, la variable `nom` reste disponible et "Mozilla" est transmis à `console.log`.

Voici un exemple un peu plus intéressant, une fonction `ajouterA` :

```js
function ajouterA(x) {
return function(y) {
return function (y) {
return x + y;
};
};
}

var ajouter_5 = ajouterA(5);
var ajouter_10 = ajouterA(10);

console.log(ajouter_5(2)); // 7
console.log(ajouter_5(2)); // 7
console.log(ajouter_10(2)); // 12
```

Expand Down Expand Up @@ -100,10 +101,10 @@ Voici le code JavaScript qui correspond :

```js
function fabriqueRedimensionneur(taille) {
return function() {
document.body.style.fontSize = taille + 'px';
return function () {
document.body.style.fontSize = taille + "px";
};
};
}

var taille12 = fabriqueRedimensionneur(12);
var taille14 = fabriqueRedimensionneur(14);
Expand All @@ -113,9 +114,9 @@ var taille16 = fabriqueRedimensionneur(16);
`taille12`, `taille14`, et `taille16` sont désormais des fermetures qui peuvent, respectivement, redimensionner le texte de l'élément `body` à 12, 14, ou 16 pixels. On peut les attacher aux boutons de la façon suivantes :

```js
document.getElementById('taille-12').onclick = taille12;
document.getElementById('taille-14').onclick = taille14;
document.getElementById('taille-16').onclick = taille16;
document.getElementById("taille-12").onclick = taille12;
document.getElementById("taille-14").onclick = taille14;
document.getElementById("taille-16").onclick = taille16;
```

```html
Expand All @@ -135,21 +136,21 @@ JavaScript ne permet pas de faire cela de façon native. En revanche, on peut é
Voici comment définir une fonction publique accédant à des fonctions et des variables privées en utilisant des fermetures. Cette façon de procéder est également connue comme le patron de conception [module](https://en.wikipedia.org/wiki/Module_pattern) :

```js
var compteur = (function() {
var compteur = (function () {
var compteurPrive = 0;
function changeValeur(val) {
compteurPrive += val;
}
return {
increment: function() {
increment: function () {
changeValeur(1);
},
decrement: function() {
decrement: function () {
changeValeur(-1);
},
valeur: function() {
valeur: function () {
return compteurPrive;
}
},
};
})();

Expand All @@ -172,21 +173,21 @@ Ces trois fonctions publiques sont des fermetures qui partagent le même environ
On remarquera qu'on définit une fonction anonyme qui crée un compteur puis qu'on l'appelle immédiatement pour assigner le résultat à la variable `compteur`. On pourrait stocker cette fonction dans une variable puis l'appeler plusieurs fois afin de créer plusieurs compteurs.

```js
var creerCompteur = function() {
var creerCompteur = function () {
var compteurPrive = 0;
function changeValeur(val) {
compteurPrive += val;
}
return {
increment: function() {
increment: function () {
changeValeur(1);
},
decrement: function() {
decrement: function () {
changeValeur(-1);
},
valeur: function() {
valeur: function () {
return compteurPrive;
}
},
};
};

Expand Down Expand Up @@ -221,16 +222,16 @@ On peut oublier parfois, dans le cas de fonctions imbriquées, qu'une fonction a
```js
// Portée globale
var e = 10;
function somme(a){
return function(b){
return function(c){
function somme(a) {
return function (b) {
return function (c) {
// Portée des autres fonctions (externes)
return function(d){
return function (d) {
// Portée locale
return a + b + c + d + e;
}
}
}
};
};
};
}

console.log(somme(1)(2)(3)(4)); // affiche 20
Expand All @@ -239,23 +240,23 @@ console.log(somme(1)(2)(3)(4)); // affiche 20

// Portée globale
var e = 10;
function somme(a){
return function somme2(b){
return function somme3(c){
function somme(a) {
return function somme2(b) {
return function somme3(c) {
// Portée des autres fonctions
return function somme4(d){
return function somme4(d) {
// Portée locale
return a + b + c + d + e;
}
}
}
};
};
};
}

var somme2 = somme(1);
var somme3 = somme2(2);
var somme4 = somme3(3);
var resultat = somme4(4);
console.log(resultat) // affiche 20
console.log(resultat); // affiche 20
```

Dans l'exemple qui précède, on a une suite de fonctions imbriquées dont chacune accède à la portée des fonctions extérieures. Dans ce contexte, on peut dire que les fermetures ont accès à _l'ensemble_ des portées des fonctions extérieures.
Expand All @@ -266,28 +267,28 @@ Avant que le mot clé [`let`](/fr/docs/Web/JavaScript/Reference/Statements/let)

```html
<p id="aide">Des aides seront affichées ici</p>
<p>E-mail&nbsp;: <input type="text" id="email" name="email"></p>
<p>Nom&nbsp;: <input type="text" id="nom" name="nom"></p>
<p>Âge&nbsp;: <input type="text" id="âge" name="âge"></p>
<p>E-mail&nbsp;: <input type="text" id="email" name="email" /></p>
<p>Nom&nbsp;: <input type="text" id="nom" name="nom" /></p>
<p>Âge&nbsp;: <input type="text" id="âge" name="âge" /></p>
```

```js
function afficherAide(aide) {
document.getElementById('aide').innerHTML = aide;
document.getElementById("aide").innerHTML = aide;
}

function preparerAide() {
var texteAide = [
{'id': 'email', 'aide': 'Votre adresse e-mail'},
{'id': 'nom', 'aide': 'Vos prénom et nom'},
{'id': 'âge', 'aide': 'Votre âge (plus de 16 ans requis)'}
];
{ id: "email", aide: "Votre adresse e-mail" },
{ id: "nom", aide: "Vos prénom et nom" },
{ id: "âge", aide: "Votre âge (plus de 16 ans requis)" },
];

for (var i = 0; i < texteAide.length; i++) {
var item = texteAide[i];
document.getElementById(item.id).onfocus = function() {
document.getElementById(item.id).onfocus = function () {
afficherAide(item.aide);
}
};
}
}

Expand All @@ -304,21 +305,21 @@ Une solution consiste à utiliser plus de fermetures et à appliquer une fabriqu

```js
function afficheAide(aide) {
document.getElementById('aide').innerHTML = aide;
document.getElementById("aide").innerHTML = aide;
}

function creerCallbackAide(aide) {
return function() {
return function () {
afficheAide(aide);
};
}

function prepareAide() {
var texteAide = [
{'id': 'email', 'aide': 'Votre adresse e-mail'},
{'id': 'nom', 'aide': 'Votre prénom et nom'},
{'id': 'âge', 'aide': 'Your age (you must be over 16)'}
];
{ id: "email", aide: "Votre adresse e-mail" },
{ id: "nom", aide: "Votre prénom et nom" },
{ id: "âge", aide: "Your age (you must be over 16)" },
];

for (var i = 0; i < texteAide.length; i++) {
var item = texteAide[i];
Expand All @@ -333,21 +334,21 @@ Voici une autre solution qui permet de ne pas utiliser plus de fermetures&nbsp;:

```js
function afficheAide(aide) {
document.getElementById('aide').innerHTML = aide;
document.getElementById("aide").innerHTML = aide;
}

function prepareAide() {
var texteAide = [
{'id': 'email', 'aide': 'Votre adresse e-mail'},
{'id': 'nom', 'aide': 'Votre prénom et nom'},
{'id': 'âge', 'aide': 'Votre âge (vous devez être majeur)'}
];
{ id: "email", aide: "Votre adresse e-mail" },
{ id: "nom", aide: "Votre prénom et nom" },
{ id: "âge", aide: "Votre âge (vous devez être majeur)" },
];

for (var i = 0; i < texteAide.length; i++) {
let item = texteAide[i];
document.getElementById(item.id).onfocus = function() {
document.getElementById(item.id).onfocus = function () {
afficheAide(item.aide);
}
};
}
}

Expand All @@ -362,20 +363,20 @@ Autrement, on aurait pu utiliser `forEach()` afin de parcourir le tableau `texte

```js
function afficheAide(aide) {
document.getElementById('aide').innerHTML = aide;
document.getElementById("aide").innerHTML = aide;
}

function prepareAide() {
var texteAide = [
{'id': 'email', 'aide': 'Votre adresse e-mail'},
{'id': 'nom', 'aide': 'Votre prénom et nom'},
{'id': 'âge', 'aide': 'Votre âge (vous devez être majeur)'}
];

texteAide.forEach(function(texte) {
document.getElementById(texte.id).onfocus = function() {
afficheAide(texte.help);
}
{ id: "email", aide: "Votre adresse e-mail" },
{ id: "nom", aide: "Votre prénom et nom" },
{ id: "âge", aide: "Votre âge (vous devez être majeur)" },
];

texteAide.forEach(function (texte) {
document.getElementById(texte.id).onfocus = function () {
afficheAide(texte.help);
};
});
}

Expand All @@ -394,11 +395,11 @@ Voici un exemple de la mauvaise façon de procéder&nbsp;:
function MonObjet(nom, message) {
this.nom = nom.toString();
this.message = message.toString();
this.getNom = function() {
this.getNom = function () {
return this.nom;
};

this.getMessage = function() {
this.getMessage = function () {
return this.message;
};
}
Expand All @@ -412,12 +413,12 @@ function MonObjet(nom, message) {
this.message = message.toString();
}
MonObjet.prototype = {
getNom: function() {
getNom: function () {
return this.nom;
},
getMessage: function() {
getMessage: function () {
return this.message;
}
},
};
```

Expand All @@ -428,10 +429,10 @@ function MonObjet(nom, message) {
this.nom = nom.toString();
this.message = message.toString();
}
MonObjet.prototype.getNom = function() {
MonObjet.prototype.getNom = function () {
return this.nom;
};
MonObjet.prototype.getMessage = function() {
MonObjet.prototype.getMessage = function () {
return this.message;
};
```
Expand Down
Loading

0 comments on commit 4817928

Please sign in to comment.