Maison > interface Web > js tutoriel > Pourquoi les accolades interrompent-elles ma fonction de flèche dans une instruction Case ?

Pourquoi les accolades interrompent-elles ma fonction de flèche dans une instruction Case ?

Susan Sarandon
Libérer: 2024-12-11 03:06:11
original
309 Les gens l'ont consulté

Why Do Curly Braces Break My Arrow Function in a Case Statement?

Les accolades dans les fonctions fléchées : un puzzle dévoilé

Dans les conférences de Dan Abramov, une question intrigante se pose : pourquoi les accolades provoquent-elles une fonction échouer à son test ? Enquêteons sur cette énigme.

Le code en question est une fonction flèche dans une instruction case :

case 'toggleTodo' :
        return (
            state.map( (one) => {
                oneTodo( one, action )
            })
        );
Copier après la connexion

Lorsque les accolades { } sont incluses, les tests échouent . Cependant, lorsqu’ils sont omis, le code fonctionne parfaitement. Voici ce qui se passe sous le capot.

Le pouvoir de l'accolade : blocs et retours explicites

Lorsque vous placez le corps d'une fonction entre accolades, vous créez un bloquer. Les blocs peuvent contenir plusieurs instructions, chacune se terminant par un point-virgule. Si vous souhaitez renvoyer une valeur à partir d'un bloc, vous devez utiliser explicitement une instruction return.

Dans le cas de la fonction flèche avec accolades, le corps consiste uniquement en un appel à oneTodo(). Puisqu'il n'y a pas d'instruction return explicite, la fonction renvoie undefined. Ce comportement inattendu provoque l'échec du test.

Pour remédier à cela, vous devez renvoyer explicitement le résultat de l'appel oneTodo() :

(one) => {
    return oneTodo(one, action);
}
Copier après la connexion

Corps concis : omettre les accolades pour plus de simplicité

Si vous omettez les accolades, la flèche la fonction a un corps concis. Les corps concis sont constitués d'une seule expression, dont le résultat est implicitement renvoyé.

Dans l'exemple sans accolades, le corps concis est :

(one) => oneTodo( one, action )
Copier après la connexion

Cette expression est équivalente à :

return oneTodo( one, action );
Copier après la connexion

En omettant les accolades, vous obtenez le même résultat sans avoir besoin d'un retour explicite déclaration.

Comprendre la différence

La clé à retenir est de comprendre la différence entre un bloc (indiqué par des accolades) et un corps concis (indiqué par l'absence d'accolades). Les blocs nécessitent des instructions return explicites, tandis que les corps concis renvoient implicitement le résultat de l'expression unique.

Ainsi, lorsque vous utilisez des fonctions fléchées dans les instructions case, n'oubliez pas d'utiliser des accolades et un return si vous avez besoin de plusieurs instructions dans le corps de la fonction. Si vous n'avez besoin que d'une seule expression, vous pouvez omettre les accolades pour créer un corps concis.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal