1
votes

Définir la variable avec la fonction de flèche

Question super rapide alors que je m'habitue aux fonctions fléchées. Je sais qu'ils reviennent implicitement, et que nous pouvons revenir implicitement tant que c'est une expression. Cependant, par exemple, puis-je réduire les éléments suivants $ scope.setEdit = () => {$ scope.edit = true; } à $ scope.setEdit = () => $ scope.edit = true; sans rencontrer de comportement indésirable? Je ne sais pas comment les fonctions fléchées se comportent lors de l'affectation d'une variable. Je ne l'ai utilisé que là où j'aurais normalement une déclaration de retour, jamais avec une simple affectation.

Ceci n'est qu'un exemple. Merci!


4 commentaires

Un code utilise-t-il la valeur de retour?


Cela n'a pas grand-chose à voir avec les fonctions fléchées, mais avec l'évaluation des expressions. Tout ce que l'expression évalue (avec des effets secondaires possibles) sera la valeur renvoyée. Donc, si vous savez ce que fait et renvoie l'expression a = b , alors vous avez votre réponse.


"Je sais qu'ils reviennent implicitement" - non, ils ne le font pas. Ils ne le font que lorsque vous omettez les accolades. myFunc = () => {a = b + c} renverra undefined , mais myFunc = () => a = b + c; renverra la nouvelle valeur de a .


Merci pour les réponses les gars. C'est clair pour moi maintenant.


3 Réponses :


2
votes

Une affectation n'est qu'une expression, comme toute autre expression:

  const a = () => b = 1;

  console.log(
    c = 1,
    a()
  );

sans avoir rencontré de comportement indésirable?

Cela dépend si l'appelant s'attend à ce que quelque chose soit retourné. Sinon, le résultat retourné n'ira nulle part, alors cela ne fait aucune différence.


1 commentaires

Merci d'avoir pris le temps de clarifier cela. Acclamations!



2
votes

Cela n'a pas grand chose à voir avec les fonctions fléchées, mais avec l'évaluation des expressions. Tout ce que l'expression évalue (avec des effets secondaires possibles) sera la valeur renvoyée.

Cette fonction d'expression de flèche:

() => {
    a = b;
    return b;
}

fait et renvoie la même chose que:

() => {
    return a = b;
}

C'est une fonction avec effets secondaires: a obtient une valeur. Les affectations peuvent se produire dans les expressions et renvoyer la valeur affectée. Donc c'est équivalent à:

() => a = b


0 commentaires

3
votes

Je pense que vous avez un malentendu sur le fonctionnement des fonctions des flèches. Ils ne retournent implicitement que lorsque vous utilisez la version abrégée.

Voici ce que je veux dire - ces trois fonctions sont fonctionnellement identiques, elles renvoient toutes la chaîne 'hello'

//regular function with no return value
var a = 'bar';
const myFunc1 = function() { a = 'foo'; }
console.log(myFunc1(), a);

//regular function with a return value
a = 'bar';
const myFunc2 = function() { return a = 'foo'; }
console.log(myFunc2(), a);

//arrow function with a return value
a = 'bar';
const myFunc3 = () => { return b = 'foo'; }
console.log(myFunc3(), a);

//arrow function with no return value
a = 'bar';
const myFunc4 = () => { b = 'foo'; }
console.log(myFunc4(), a);

//arrow function using shorthand, which has an implicit return value
a = 'bar';
const myFunc5 = () => b = 'foo';
console.log(myFunc5(), a);


3 commentaires

Merci pour la clarification. Bien que impossible à comprendre d'après la façon dont j'ai formulé ma question, j'en suis réellement conscient. J'aurais dû inclure "lors de l'utilisation de la syntaxe abrégée"


En gardant cela à l'esprit et en relisant votre question, je comprends mieux. il semble que vous vouliez utiliser la syntaxe abrégée, mais vous ne voulez pas l'effet secondaire qui se produit puisqu'ils renvoient maintenant des valeurs. Je dirais ... ne fais pas ça. Le code deviendra très déroutant si toutes les fonctions ont maintenant une valeur de retour que rien n'utilise jamais. Tout ce qu'il faut, c'est un développeur novice pour mal comprendre cela et en venir à se fier aux effets secondaires.


Oui je suis d'accord. Merci encore pour la clarification, Chris.