Maison  >  Article  >  interface Web  >  Explication détaillée du principe et de la mise en œuvre de la pré-analyse JavaScript

Explication détaillée du principe et de la mise en œuvre de la pré-analyse JavaScript

黄舟
黄舟original
2017-03-14 15:32:231363parcourir

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';
(4) Regardons un autre exemple pour approfondir notre impression de la « pré-analyse » JavaScript. Dans le code suivant, vous verrez que la boîte de dialogue qui apparaît deux fois affiche Ceci est le message 2. Pourquoi ? En fait, deux fonctions portant le même nom sont définies l'une après l'autre ci-dessous. La dernière showMsg() écrase celle définie précédemment (en JavaScript, les variables portant le même nom auront également des problèmes d'écrasement), ce qui signifie que la première showMsg() est mis au rebut. Pourquoi le deuxième appel de showMsg() n'appelle-t-il pas la fonction message 1 définie ci-dessus ? Cela prouve une fois de plus que JavaScript a un comportement de « pré-analyse ».

showMsg(); // This is message 2 
function showMsg() 
{ 
alert('This is message 1'); 
} 
showMsg(); // This is message 2 
function showMsg() 
{ 
alert('This is message 2'); 
}
(5) La "pré-analyse" JavaScript consiste à pré-analyser des variables ou des fonctions dans l'environnement où elles peuvent être appelées (environnement d'exécution de variables). Le code suivant semble avoir vu la définition de msg avant alert(msg), mais le programme signale toujours l'erreur "msg n'est pas défini". En effet, les variables définies dans la fonction sont des variables privées de la fonction et ne peuvent pas être appelées. directement de l'extérieur. Cela indique que la "pré-analyse" JavaScript ne signifie pas analyser toutes les variables définies dans un

objet global, tel qu'une fenêtre.

function showMsg() 
{ 
var msg='This is message'; 
} 
alert(msg); // msg未定义
(6) La "pré-analyse" JavaScript est effectuée en sections, ou en blocs 3f1c4e4b6b16bbbd69b2ee476dc4f83a Le code suivant apparaît dans deux blocs de script sur la même page et définit trois fonctions portant le même nom. Les résultats de l'exécution du programme montrent que showMsg() du deuxième bloc de script ne couvre pas les deux premiers showMsg(), tandis que le deuxième showMsg() du premier bloc de script couvre le premier showMsg().

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn