Est-ce que la compile de Javascript ou l'interprétation à deux passes?

Je suis un programmeur novateur JavaScript reconnu et j'essaie d'en apprendre davantage. Donc, je me tourne vers vous pour aider les gens, avec cette question facile :). Le livre O'Reilly que je lis continue de se référer au temps de compilation du code JavaScript. Ma connaissance de la programmation fonctionnelle (le schéma et le goûte) me dit que le JavaScript est réellement interprété par le navigateur, ce qui nécessite probablement deux passes via JavaScript.

Suis-je incorrect dans mon évaluation? Ou le temps de compilation que le livre se réfère réellement juste au premier passage de l'interprète, comme Perl ou Python fonctionnerait? Merci!

Il dépend du navigateur. Consultez SquirrelFish Extreme et Google V8 de WebKit pour voir ce qui se passe à la fin la plus rapide et regardez JaegerMonkey de Mozilla pour cette implémentation.

AFIAK V8 et SFX sont des JIT, de sorte qu'ils compilent le code JS en provenance d'origine. JaegerMonkey et TraceMonkey se combinent dans Firefox pour former un système où, si le code serait plus rapide, TraceMonkey l'exécute et si le code était plus rapide, JaegerMonkey le compile, tout comme SFX.

Avez-vous une phrase que vous pourriez citer pour aider au contexte?

Javascript est compilé sur le navigateur (il est envoyé au navigateur en toute simplicité). Mais il ne se compile que lorsqu'il est chargé. Donc, si vous avez une étiquette de script suivie d'une balise div suivie d'une étiquette de script, elle va charger ces choses séquentiellement. Le navigateur arrêtera de charger la page entière (il télécharge toujours les ressources, ne charge pas le HTML) jusqu'à ce que votre script ait été chargé (c'est parce que le script peut avoir 'document.write').

<script> var someVariable = 'hello world'; alert(document.getElementById('someid')); //alerts undefined </script> <div id='someid'></div> <script> alert(document.getElementById('someid')); //alerts 'someid' alert(someVariable); //alerts 'hello world' </script> 

Il y a du temps de lecture et d'exécution dans JS (comme j'aime le penser, car ce n'est pas vraiment compilé, mais interprété). Il semble que le livre O'Reilly utilise le temps de compilation comme synonyme de lecture.

Le temps de lecture est lorsque le moteur lit tout le code et évalue tout à l'échelle mondiale. Habituellement, cela crée des crochets sur les événements qui déclencheront l'exécution du code.

Le temps d'exécution est tout le reste.