


Pré-analyse JavaScript et compétences associées Compétences d'analyse_javascript
Cet article décrit la pré-analyse JavaScript et les techniques associées avec des exemples. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
Variable
De même, commencez par les conseils de comparaison d'erreurs de ces deux petits exemples.
alert(y1); //代码段1 var y1 = 'dddd'; alert(y2); //代码段2 // alert(typeof y2); y2 = 'xxxxx';
Pensez-y d'abord, pourquoi l'un demande undéfini et l'autre renvoie une erreur de variable non définie. . Examinons d'abord le processus d'analyse JavaScript.
Javascript effectuera un événement de « pré-analyse » avant d'exécuter le processus. Le moteur d'analyse effectuera la création de toutes les variables var au niveau du bloc et leur donnera une valeur initiale : indéfinie. De cette façon, il est évident pourquoi undefined apparaît dans le premier exemple.
Donc, le premier morceau de code est en fait équivalent à
var y1; alert(typeof y1); //很自然,它此时值为undefined y1 = 'dddd';
Alors pourquoi le deuxième morceau de code renvoie-t-il à nouveau une erreur ? Il n'est plus à l'étape de "pré-analyse". (Ici, je suppose que le navigateur ne fait que deux choses lorsqu'il rencontre une balise de script : la pré-analyse. et exécution., en fait, ce ne sont pas seulement ces deux choses), mais dans la phase d'exécution, la raison pour laquelle l'erreur est générée est que js ne connaît pas l'état de y2 dans l'état de la section d'exécution (l'étape de pré-analyse). ne capture aucune information sur y2), bien sûr, une erreur non définie est renvoyée. Cela implique un autre problème : js est un langage faiblement typé et les variables peuvent être utilisées sans être définies, alors pourquoi une erreur de définition est-elle générée ici ?
Tout arrive pour une raison. JavaScript a toujours de nombreuses caractéristiques étranges, telles que la lecture et l'écriture inégales des variables. Les variables non définies sont uniquement accessibles en écriture et non en lecture. Qu'est-ce qui est inscriptible ? Tout le monde connaît cette façon d'écrire :
y2 = 'exam'; //在没出现它的定义操作之前(即在它还没有自己的scope之前)该操作会将这段代码认为是定义一个全局变量,在window上注册一个属性y2,并赋值为exam
Mais en le lisant, le moteur js ne trouve aucune information pertinente à son sujet, il agit donc selon son propre tempérament et renvoie une erreur indéfinie sans pitié. C'est la règle du jeu de js. Et pourtant, pourquoi pouvons-nous obtenir son type ? Rappelez-vous comment js fonctionne sur les objets. Si vous accédez à une propriété et à un type d'objet inexistants, vous serez invité à indiquer undefined (car il s'agit actuellement d'une propriété de l'objet window).
Autre remarque : une distinction doit être faite ici. La lecture et l'écriture des variables ne sont pas égales. Elle n'est utilisée que pour les variables. Cette fonctionnalité n'existe pas. , cela affichera une invite indéfinie.
Conclusion
Voici le résultat de ma réflexion : il existe certaines similitudes entre les opérations d'écriture de variables et d'objets. Cependant, chacune a son propre ensemble de règles pour les opérations de lecture. De ce fait, le problème ci-dessus se pose.
De cette façon, il devrait être facile d’obtenir la réponse à la question suivante.
if (!('a' in window)) { var a = 1; } alert(a);
Fonction
Par extension, fonction. Rappelez-vous la pré-analyse mentionnée ci-dessus. Dans la pré-analyse de javascript, en plus de la pré-définition de la variable var, elle inclut également l'extraction de la définition de la fonction, donc la fonction. la fonction peut être définie n'importe où dans le script, appelée n'importe où. Sans se limiter à ce que c'était avant.
Mais la façon de définir les fonctions inclut une méthode appelée définition littérale, qui utilise la méthode var pour déclarer les fonctions. Voir ci-dessous
.alert(typeof y3); //结果? var y3 = function (){ console.log('1'); }
Rappelez-vous cette convention : l'appel doit apparaître après la déclaration. Pourquoi ? Si vous comprenez ce qui précède, la réponse ici est déjà claire. Le moteur javascript leur donnera une valeur initiale indéfinie lors de la pré-analyse de var. De cette façon, si nous l'appelons avant sa déclaration, le moteur javascript n'a pas encore obtenu sa vraie valeur, et signalera naturellement "xxx n'est pas une fonction". " Faux. Cela clarifie également pourquoi ce sont deux déclarations de fonction, mais l'une est liée à l'ordre de déclaration et d'appel, tandis que l'autre n'a pas de telles contraintes.
Conclusion
C'est une fonction, le résultat de l'exécution de js et de la modification dynamique, et suit toujours les règles de pré-analyse des variables (lors de l'alerte ci-dessus, elle n'a pas obtenu les informations de la fonction littérale).
Et si les deux étaient mélangés. Voir ci-dessous, il existe à la fois des variables et des fonctions pour y4.
alert(typeof y4); //结果? function y4(){ console.log('y4') } var y4;
Parce que la priorité de déclaration de la fonction dans la pré-analyse JavaScript est élevée, y4 est naturellement du type fonction, mais après que y4 se soit vu attribuer une valeur (le moteur js est en cours d'exécution en ce moment), son opération d'affectation à js sera Remplacer la déclaration de la fonction. Alors :
alert(typeof y5); var y5 = 'angle'; function y5(){ console.log('ghost'); } alert(y5);
Le premier résultat de l'alerte est la fonction car il se situe au sommet du processus d'exécution js. Lors de la deuxième alerte, sa valeur a été réécrite à 5 (ne vous laissez pas tromper par la position de définition de la fonction ci-dessous.)
En pensant séparément à l'analyse et à l'exécution de js, j'ai découvert que mes yeux se sont soudainement éclairés et que les réponses à de nombreuses questions ont naturellement émergé. Comme l'a dit l'auteur de cet article : « Une fois que vous avez compris l'environnement d'exécution, l'appel d'un objet, close Des concepts tels que les packages, la portée lexicale et les chaînes de portée peuvent facilement résoudre de nombreux phénomènes dans le langage JS "
.En regardant maintenant, même dans cette langue où il y a beaucoup de choses incroyables, il y a de nombreuses raisons qui y remontent.
Comment faire un meilleur jugement des paramètres
Après avoir tant discuté ci-dessus, comment pouvons-nous le rapprocher du développement réel ? Étant donné que JavaScript a une lecture et une écriture inégales, comment pouvons-nous éviter de porter des jugements de paramètres sans signaler d'erreurs ?
ex :
if(cusVar){ //这里的判断,是不是存在隐含的问题呢。 }
如何严谨一些呢。
if(window['cusVar']) { //保证它不报错。 //或者这样的判断也是可行的 window.cusVar | typeof cusVar !== 'undefined' //干活咯 }
最后补充又一个小quiz, (理解 预解析与执行的分离)
var y7 = 'test'; function fun1(){ alert(y7); var y7 = 'sex'; } fun1();
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript动画特效与技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser WebSocket et JavaScript pour mettre en œuvre un système de reconnaissance vocale en ligne Introduction : Avec le développement continu de la technologie, la technologie de reconnaissance vocale est devenue une partie importante du domaine de l'intelligence artificielle. Le système de reconnaissance vocale en ligne basé sur WebSocket et JavaScript présente les caractéristiques d'une faible latence, d'un temps réel et d'une multiplateforme, et est devenu une solution largement utilisée. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de reconnaissance vocale en ligne.

WebSocket et JavaScript : technologies clés pour réaliser des systèmes de surveillance en temps réel Introduction : Avec le développement rapide de la technologie Internet, les systèmes de surveillance en temps réel ont été largement utilisés dans divers domaines. L'une des technologies clés pour réaliser une surveillance en temps réel est la combinaison de WebSocket et de JavaScript. Cet article présentera l'application de WebSocket et JavaScript dans les systèmes de surveillance en temps réel, donnera des exemples de code et expliquera leurs principes de mise en œuvre en détail. 1. Technologie WebSocket

Introduction à l'utilisation de JavaScript et de WebSocket pour mettre en œuvre un système de commande en ligne en temps réel : avec la popularité d'Internet et les progrès de la technologie, de plus en plus de restaurants ont commencé à proposer des services de commande en ligne. Afin de mettre en œuvre un système de commande en ligne en temps réel, nous pouvons utiliser les technologies JavaScript et WebSocket. WebSocket est un protocole de communication full-duplex basé sur le protocole TCP, qui peut réaliser une communication bidirectionnelle en temps réel entre le client et le serveur. Dans le système de commande en ligne en temps réel, lorsque l'utilisateur sélectionne des plats et passe une commande

Comment utiliser WebSocket et JavaScript pour mettre en œuvre un système de réservation en ligne. À l'ère numérique d'aujourd'hui, de plus en plus d'entreprises et de services doivent fournir des fonctions de réservation en ligne. Il est crucial de mettre en place un système de réservation en ligne efficace et en temps réel. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de réservation en ligne et fournit des exemples de code spécifiques. 1. Qu'est-ce que WebSocket ? WebSocket est une méthode full-duplex sur une seule connexion TCP.

JavaScript et WebSocket : Construire un système efficace de prévisions météorologiques en temps réel Introduction : Aujourd'hui, la précision des prévisions météorologiques revêt une grande importance pour la vie quotidienne et la prise de décision. À mesure que la technologie évolue, nous pouvons fournir des prévisions météorologiques plus précises et plus fiables en obtenant des données météorologiques en temps réel. Dans cet article, nous apprendrons comment utiliser la technologie JavaScript et WebSocket pour créer un système efficace de prévisions météorologiques en temps réel. Cet article démontrera le processus de mise en œuvre à travers des exemples de code spécifiques. Nous

Tutoriel JavaScript : Comment obtenir le code d'état HTTP, des exemples de code spécifiques sont requis Préface : Dans le développement Web, l'interaction des données avec le serveur est souvent impliquée. Lors de la communication avec le serveur, nous devons souvent obtenir le code d'état HTTP renvoyé pour déterminer si l'opération a réussi et effectuer le traitement correspondant en fonction de différents codes d'état. Cet article vous apprendra comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournira quelques exemples de codes pratiques. Utilisation de XMLHttpRequest

Utilisation : En JavaScript, la méthode insertBefore() est utilisée pour insérer un nouveau nœud dans l'arborescence DOM. Cette méthode nécessite deux paramètres : le nouveau nœud à insérer et le nœud de référence (c'est-à-dire le nœud où le nouveau nœud sera inséré).

JavaScript est un langage de programmation largement utilisé dans le développement Web, tandis que WebSocket est un protocole réseau utilisé pour la communication en temps réel. En combinant les puissantes fonctions des deux, nous pouvons créer un système efficace de traitement d’images en temps réel. Cet article présentera comment implémenter ce système à l'aide de JavaScript et WebSocket, et fournira des exemples de code spécifiques. Tout d’abord, nous devons clarifier les exigences et les objectifs du système de traitement d’images en temps réel. Supposons que nous disposions d'un appareil photo capable de collecter des données d'image en temps réel.
