JavaScript – Fonctions comme objets

Le concept de fonctions étant des objets en JavaScript serait correct avec moi si je pouvais comprendre la question suivante. J'ai cherché dans le moteur javascript pour essayer de trouver la réponse, mais aucune explication que j'ai trouvée jusqu'ici ne soit bien prise en compte …

Un objet comme celui ci-dessous est compris de manière compréhensible dans un type de construction de type hash.

var person = { firstName:"John", lastName:"Doe", age:50, eyeColor:"blue" }; 

Cependant, dire que c'est aussi un objet est l'endroit où je me suis coincé:

 var name = function () { alert ('name'); } 
  1. En termes de mémoire, comment cette fonction est-elle stockée?

  2. Les déclarations dans la «carte hash» d'une fonction sont-elles définies dans un ordre d'exécution? Donc chaque propriété est appelée après l'autre?

Je manque probablement quelque chose ou de visualiser quelque chose de mal.

Merci.

PS

Pour clarifier la question 2,

Dire que j'ai une déclaration if dans ma fonction … sera-t-elle stockée dans une propriété accessible par l'une de ses propriétés?

Chaque objet de javascript possède des propriétés (paires de valeurs-clés identifiées par des chaînes ou des symboles) et possède des créneaux internes .

Le name objet de la fonction est mémorisé dans le même format que l'objet person , mais les créneaux horaires internes diffèrent.

  • Les propriétés de la personne sont lastName , lastName , age et eyeColor , chacune contenant la valeur primitive respective
  • Les machines à sous internes de la person sont (entre autres):

    • [[prototype]] , pointant vers Object.prototype
  • Les propriétés du name sont le name , le prototype et la length (comme typique pour Function instances de Function )

  • Les emplacements internes du name sont (entre autres):
    • [[prototype]] , pointant vers Function.prototype
    • [[ECMAScriptCode]] , pointant vers le code de la fonction
    • [[Environment]] , en indiquant la portée de la fermeture a été créée

Avertissement: Ce n'est que comme cela se comporte, les moteurs peuvent implémenter cela, mais ils le souhaitent. Pourtant, il sert bien comme modèle mental, et il est important de comprendre que les objets ont une couche inférieure aux propriétés visibles publiquement.

Les fonctions sont des objets, en ce sens qu'elles peuvent avoir des propriétés et des méthodes. Contrairement aux objets, ils peuvent également être appelés et renverront toujours un résultat.

Notez que la spécification de langue ECMAScript (c'est-à-dire JavaScript) décrit comment les objets de fonction doivent se comporter plutôt que la mise en œuvre sous-jacente, de sorte que la représentation en mémoire de l'objet dépendra de la mise en œuvre.

En ce qui concerne 2: Notez que le texte intégral d'une fonction peut être stocké dans la propriété functionBody , mais le corps d'une fonction ne doit pas être JavaScript. Il pourrait s'agir d'un code natif, par exemple, qui n'est pas significatif de revenir dans une chaîne.

Si vous voulez simplement faire un codage JavaScript régulier, je ne pense pas que vous devez vraiment vous soucier de la façon dont la fonction est stockée par le navigateur ou le serveur ou autre. Je pense que vous méconnais l'objet-nature d'une fonction. Les lignes de code à l'intérieur de la fonction ne sont pas des parties individuelles d'une carte de hash. Plutôt (et cela ne fait que commencer à toucher le concept), une fonction peut avoir des propriétés avec des noms et des valeurs tout comme un objet régulier peut avoir de telles propriétés. Le code suivant le démontre.

 var myFunc = function() { var x = "hello".toUpperCase(); document.write('<p>' + x + '</p>'); }; myFunc.favoriteColor = "red"; myFunc(); // runs the function and shows the text "hello" document.write("<p>" + myFunc.favoriteColor + "</p>"); // shows the text "red" 

La réponse à 1. est: Cela dépend de la mise en œuvre.

La deuxième question n'a aucun sens.

Je pense que vous examinez la syntaxe et, en supposant que, parce que la façon dont les données sont déclarées et la façon dont les fonctions sont déclarées, une fonction peut être traitée comme une donnée dans la langue.
Ce n'est pas le cas.

Il y a des langues où ceci est le cas. Lisps et Prolog sont les exemples les plus courants. Voir: https://en.wikipedia.org/wiki/Homoiconicity