Question

quand je code:

var a =
function()
{
    alert("44")
    return function(){alert(33)}
}()();

cette expression est-elle évaluée dans l'ordre suivant?

  1. définir la fonction;
  2. passe son pointeur de référence sur un
  3. a () est appelé
  4. retourne dans un nouveau pointeur de fonction
  5. a () est à nouveau appelé

et si oui, pourquoi ai-je une erreur de syntaxe si je le fais:

function()
{
    alert("44")
    return function(){alert(33)}
}();

l'interprète veut d'abord un opérande de gauche ...

mais cette syntaxe fonctionne:

(
  function()
  {
    alert("44")
    return function(){alert(33)}
  };

)()

la parenthèse externe que signifie le sens ???

Merci

Était-ce utile?

La solution

C'est la syntaxe du langage. Si vous souhaitez exécuter une fonction anonyme sur place, vous devez la placer entre parenthèses.

JS a ces cas extrêmes où la syntaxe est plus étrange que prévu. Prenons, par exemple, l’évaluation d’une chaîne contenant un JSON ne fonctionne que si elle est entourée de parenthèses.

// Wrong
eval("{ ... }");
// Right
eval("({ ... })");

C'est la syntaxe du langage.

Cela dit, je pense (et ceci est strictement à mon humble avis), les étapes que vous avez décrites ne sont pas précises.

  1. La fonction est définie et appelée. alerte (" 44 "); se produit à la suite.
  2. La fonction retourne une autre fonction qui est également appelée. alerte (" 33 "); se passe.
  3. La fonction la plus interne ne renvoie rien, donc a est indéfinie. typeof a renvoie "non défini".

Autres conseils

  1. function () {alert ("44")) renvoie function () {alert (33)}} vous définissez la fonction
  2. function () {alert (" 44 ") renvoie function () {alert (33)}} () vous appelez cette fonction en retournant une fonction anonyme function () {alert (33)}
  3. function () {alert (" 44 ") renvoie function () {alert (33)}} () () vous appelez la fonction retournée, elle est donc équivalente à function () {alert (33)} ()

Donc toute l'exécution est équivalente à:

alert("44"); alert(33);

Je viens aussi d'apprendre des fonctions d'invocation automatique.
et je pense que le code devrait être 3. (function () {alert ("44")); renvoyer function () {alert (33);}}) () ()

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top