C'est normal, la boucle s’exécute et à la fin de celle ci la variable globale "cle" vaut 789. Donc si exécutée après cette boucle, la fonction sender affichera toujours 789.
C'est quoi ton but? Afficher la valeur de la propriété clé de chaque objet de ton array avec une périodicité de 10s entre l'affichage de chaque clé? Apprendre comment passer une variable à une fonction? Comprendre comment fonctionne setTimeout (o minusucle au passage)?
D'après ce que je comprend de ton message tu souhaite afficher toute les 10000ms une key de ta variable arr. Dans ton code, ce qui ce passe, comme mon vdd la dit, c'est que la boucle a déjà fini de tourner lorsque tu demande l'affichage de l'une des valeurs.
Pour éviter cela, la méthode est relativement simple, tu crée une boucle... de fonction. En bref c'est comme une boucle, sauf que tu peut repousser "le prochain tour de la boucle" grâce a un setTimeout.
!