JavaScript est sans aucun doute un langage interprété, mais est-il uniquement analysé phrase par phrase de haut en bas au moment de l'exécution ?
En fait, un phénomène prouve que ce n'est pas le cas Grâce au "JavaScript Definitive Guide" et aux informations en ligne associées, nous avons appris que JavaScript a un comportement de "pré-analyse". Il est important de comprendre cette fonctionnalité, sinon vous risquez de rencontrer de nombreux problèmes qui ne pourront pas être résolus lors du développement réel, et même conduire à des bugs dans le programme. Afin d'analyser ce phénomène, et comme résumé de mon propre apprentissage, cet article vous guidera progressivement pour comprendre la "pré-analyse" JavaScript. Si mon opinion est fausse, veuillez me corriger.
(1) Si JavaScript n'est analysé que de haut en bas au moment de l'exécution, il est compréhensible que le code suivant puisse s'exécuter correctement, car nous définissons d'abord la fonction puis l'appelons-la.
function showMsg() { alert('This is message'); } showMsg(); // This is message
(2) Nous savons également que les fonctions peuvent être définies après avoir appelé le code, et que le code suivant peut également fonctionner normalement. Il semble que showMsg() ne soit toujours pas défini lorsque showMsg() est appelé, mais il fonctionne normalement, ce qui indique que JavaScript est "pré-analysé".
showMsg(); // This is message function showMsg() { alert('This is message'); }
(3) Ce qui précède est un exemple de fonction, et voici un autre exemple de variable ordinaire. Lorsque l'exemple suivant est exécuté, undefined apparaîtra, indiquant que msg dans la première phrase a été défini, mais n'a pas été initialisé. C'est la même chose que var msg; alert(msg);. Si vous commentez la deuxième phrase ci-dessous, une erreur « le message n'est pas défini » sera signalée. Cela indique également que JavaScript est « pré-analysé ».
alert(msg); //undefined var msg='This is message';
showMsg(); // This is message 2 function showMsg() { alert('This is message 1'); } showMsg(); // This is message 2 function showMsg() { alert('This is message 2'); }
objet global, tel qu'une fenêtre.
function showMsg() { var msg='This is message'; } alert(msg); // msg未定义