Trois raisons principales auxquelles je peux penser:
- Accès à l'étendue parent
- Intimité
- Réduction des noms définis dans les étendues supérieures
Accès à l'étendue parent: les définitions de fonction en ligne permettent au code en ligne d'avoir accès aux variables définies dans les étendues parent. Cela peut être très utile pour de nombreuses choses et peut réduire la quantité ou la complexité du code s'il est fait correctement.
Si vous placez le code dans une fonction définie en dehors de cette portée, puis appelez le code, vous devrez alors passer tout état parent auquel il souhaite accéder à la fonction.
Confidentialité: le code dans une définition anonyme en ligne est plus privé et ne peut pas être appelé par un autre code.
Réduction des noms définis dans les étendues supérieures: c'est le plus important lorsque vous travaillez dans la portée globale, mais une déclaration anonyme en ligne évite d'avoir à définir un nouveau symbole dans la portée actuelle. Étant donné que Javascript ne nécessite pas nativement l'utilisation d'espaces de noms, il est sage d'éviter de définir plus de symboles globaux que nécessaire.
Éditorial: Cela semble être devenu une chose culturelle en Javascript où déclarer quelque chose de manière anonyme en ligne est en quelque sorte considéré comme "mieux" que de définir une fonction et de l'appeler même lorsque l'accès à l'étendue parent n'est pas utilisé. Je soupçonne que c'était d'abord à cause du problème de pollution de l'espace de noms global dans Javascript, puis peut-être à cause de problèmes de confidentialité. Mais il est maintenant devenu quelque chose de quelque chose de culturel et vous pouvez le voir exprimé dans de nombreux organismes publics de code (comme ceux que vous mentionnez).
Dans des langages comme C ++, la plupart considéreraient probablement comme une pratique loin d'être idéale d'avoir une fonction géante qui s'étend sur plusieurs pages / écrans. Bien sûr, C ++ a un espace de noms intégré, ne fournit pas d'accès à l'étendue parent et a des fonctionnalités de confidentialité, il peut donc être entièrement motivé par la lisibilité / maintenabilité tandis que Javascript doit utiliser l'expression de code pour atteindre la confidentialité et l'accès à l'étendue parent. Ainsi, JS semble simplement avoir été motivé dans une direction différente et c'est devenu quelque chose de culturel dans la langue, même lorsque les éléments qui ont motivé cette direction ne sont pas nécessaires dans un cas spécifique.