Bonjour,
js_html a écrit :
Je parle dans tout le script...
Misère. Je ne sais même pas pourquoi on te laisse encore faire du javascript. Te laisser regarder un ordinateur (même de loin), c'est peut-être déjà trop !
Bref, il me semble que là, tu exagères. De la part d'un débutant, on aurait pu le comprendre. Mais tu n'es plus un débutant. Cela fait des mois (au moins) que tu as commencé, et tu as déjà plusieurs centaines de posts ici, avec parfois des questions qui étaient dans la catégorie difficile. On s'attend à ce que tu aies compris ce qu'est le paramètre d'une fonction. Pour le forEach(), admettons que tu découvres, mais il suffirait que tu fasses un script de 3 lignes pour tester et normalement, après, c'est bon, tu devrais avoir compris.
On commence par la fin.
1)
videos.forEach(z => setYT(z));
La variable videos a été initialisée plus haut dans le script et contient la liste des éléments html iframes (contenant les videos youtube) se trouvant dans la page. J'espère que jusque là, ça va.
Le forEach() parcourt en boucle la liste de ces iframes, comme je l'ai déjà écrit dans ma réponse précédente. À chaque boucle, z vaut donc l'un des éléments html iframe de la page. Ce code est équivalent à :
for(let k=0;k<videos.length;k++) setYT(videos[k]);
z dans le forEach() vaut la même chose que videos[k] dans le for().
L'intérêt évident du forEach() est qu'il est plus concis.
2)
function setYT(z) {
player[z.id].player = new YT.Player(z.id, {
events: {
'onStateChange': player[z.id].onPlayerStateChange
}
});
}
La fonction setYT() est utilisée dans le forEach() précédent. z, qui est le paramètre de la fonction, vaut donc à l'intérieur de setYT() un élément html de type iframe (un élément différent à chaque boucle du forEach()).
3)
videos.forEach(z => setPlayer(z));
Pareil que pour le 1), sauf qu'on appelle setPlayer() au lieu de setYT(). z vaut un élément html de type iframe.
4)
function setPlayer(z) {
z.id = ytId(z);
...
}
Pareil que pour le 2). z vaut un élément html de type iframe.
5)
function ytId(z) {
var src = z.getAttribute('src');
return src.replace(/^.*\/([^\/?]+)\?.*$/, "$1");
}
La fonction est appelée par setPlayer() à la ligne z.id = ytId(z);
Le z qui est en paramètre de setPlayer() est un élément html de type iframe. Il est transmis à la fonction ytId() via la ligne z.id = ytId(z); qui se trouve dans setPlayer(). Et du coup, le z à l'intérieur de ytId() est aussi un élément html de type iframe.
En résumé, z est initialisé dans les forEach() en prenant successivement la valeur de chaque élément iframe de la page, et est transmis aux autres fonctions via le paramètre de ces fonctions, que l'on a partout appelé z, mais que l'on aurait pu appeler autrement, et on aurait même pu choisir un nom différent pour chaque fonction.
Amicalement,
Modifié par parsimonhi (25 Feb 2021 - 11:16)