Maison >interface Web >js tutoriel >Interprétation détaillée de la pré-interprétation JS

Interprétation détaillée de la pré-interprétation JS

亚连
亚连original
2018-05-21 09:19:051398parcourir

Maintenant, je vais vous apporter une compréhension pertinente de la pré-interprétation JS. Permettez-moi de le partager avec vous maintenant et de le donner comme référence pour tout le monde.

1. L'espace mémoire dans JS est divisé en deux types : la mémoire de pile et la mémoire tas

Mémoire de pile : fournit un environnement pour l'exécution du code JS ; types Value ; ->La portée globale ou la portée privée sont en fait de la mémoire de pile

Mémoire de tas : stocke les valeurs des types de données de référence (les objets y stockent les noms d'attribut et les valeurs d'attribut, et les fonctions stockent l'attribut noms et valeurs d'attribut dans le corps de la fonction) Le code est stocké sous forme de chaîne)

2. Lorsque le navigateur chargera notre page HTML, il fournira d'abord un environnement pour l'exécution du code JS -> ; portée globale (global-> window)

3. Avant que le code JS ne soit exécuté, le navigateur doit faire quelque chose par lui-même : déclarer ou définir à l'avance tous les mots-clés avec var/function -> "pré-interprétation" (Son variable)

Déclarer -> Dites au navigateur que j'ai une telle chose, comme var num1; -> Donnez-nous des variables déclarées ou des affectations de fonctions, telles que num1=12; fn=function(){}

[Important] Les variables sont uniquement déclarées mais non définies, et la valeur par défaut est indéfinie (indéfinie)

4. Var et fonction sont traités différemment dans la phase de pré-interprétation

var -> ne sera déclaré que lorsque le code sera exécuté. Terminer l'opération d'affectation

fonction -> Lors de la pré-interprétation, la déclaration et la définition seront complétées à l'avance (lorsque le code sera exécuté, le code défini sera ignoré directement)

[Important] Au début, seule la pré-interprétation est effectuée sous window Actuellement, toutes les chaînes stockées dans la fonction fn sont des chaînes, donc var total n'a aucune signification pratique, donc aucune pré-. l'interprétation est effectuée -> "La pré-interprétation se produit dans la fonction actuelle "

console.log(obj);//->undefined
 var obj = {name: "张珊珊", age: 10};
 function fn(num1, num2) {//代码执行到这一行的时候直接的跳过,因为在预解释的时候我们已经完成了声明加定义
var total = num1 + num2;
 console.log(total);
 }
 var num1 = 12;

 fn(num1, 100);//执行fn,把全局变量num1的值赋值给形参num1,把100赋值给形参num2
sous la portée 5. Les variables déclarées dans la portée globale sont des variables globales

Les variables déclarées dans la portée privée sont des variables privées ; Les paramètres formels d'une fonction sont également des variables privées ;

Comment savoir si une variable apparaissant dans une fonction est privée ou globale ?

Premièrement vérifiez s'il s'agit d'un paramètre formel, puis vérifiez s'il est dans la portée privée. Il a été déclaré (si var a été déclaré) et l'une des deux est une variable privée, donc peu importe où elle apparaît dans la fonction actuelle , il est privé, et n'a rien à voir avec le global ; s'il n'y en a pas, cela signifie Si ce n'est pas privé, recherchez dans sa portée de niveau supérieur...

6. la fonction est exécutée, une nouvelle portée privée (mémoire de pile) sera formée pour le corps de la fonction

1) Attribution de valeurs aux paramètres formels

2) Pré-interprétation ; en portée privée

3) Exécution de code en portée privée

formation La nouvelle portée privée protège également les variables privées à l'intérieur du monde extérieur Nous utilisons ce mécanisme de protection de la fonction -> "fermeture

.

Différence : ceux avec var peuvent être utilisés avant l'exécution du code. La déclaration sans var ne peut pas être faite à l'avance

1. Une pré-explication est requise, que la condition soit vraie ou non

window预解释:var a; -> window.a;
 if (!("a" in window)) {//"a" in window -> true
 var a = "我们";
 }
console.log(a);//->undefined
2. Pré-explication L'interprétation ne se produit que sur le côté gauche de "=", seul le côté gauche est pré-interprété et la valeur sur le côté droit n'est pas pré-interprétée. -interprétée

Expression de fonction d'une fonction anonyme : traite la partie de définition de la fonction comme La valeur est attribuée à un événement d'une variable ou d'un élément

Lorsqu'elle est pré-interprétée : var fn; > La valeur par défaut de fn n'est pas définie

3. Le code ci-dessous renvoyé dans le corps de la fonction n'est plus exécuté, mais le code suivant doit participer à la pré-interprétation et aux éléments après le retour ; doit être traité, mais comme il est renvoyé sous forme de valeur, aucune pré-interprétation n'est effectuée
fn();//->undefined() Uncaught TypeError: fn is not a function JS中只有函数可以执行 && JS上面的代码如果报错了,在不进行任何的特殊处理情况下我们下面的代码都不在执行了
var fn = function () {
 console.log("ok");
 };
 fn();

预解释的时候:fn=xxxfff000
 fn();//->"ok"
 function fn() {
 console.log("ok");
 }
 fn();//->"ok"

4 , La fonction anonyme n'est pas pré-interprétée dans la portée globale
var total = 300;
 function fn() {
 console.log(total);
 return function sum() {};//return是把函数中的值返回到函数的外面,这里是把function对应的内存地址返回的到函数的外面,例如:return xxxfff111;函数体中return下面的代码都不在执行了
var total = 10;
 }
 fn();

La fonction auto-exécutable de la fonction anonyme : la définition et l'exécution sont complétées ensemble

(function(num){})( 100);

5. , si le nom est répété, déclarez-le une seule fois et non à plusieurs reprises, mais l'affectation doit quand même être répétée

en JS Si les noms des variables et des fonctions sont les mêmes, ils seront comptés comme des doublons

Pré-explication :

Ce qui précède est ce que j'ai compilé pour tout le monde. J'espère que cela sera utile à tout le monde à l'avenir.
var fn; 声明
fn = xxxfff000; [声明]不要了+定义
fn = xxxfff111; [声明]不要了+定义
->fn=xxxfff111
 var fn = 12;//window.fn=12
 function fn() {//window.fn=function(){}
 }
 function fn() {
 }

Articles associés :

Plusieurs méthodes de suppression d'un ou plusieurs éléments d'un tableau à l'aide de Js


Détails Parler du propriétés et méthodes de l'objet intégré Math en

js (clair en un coup d'œil)

Objet JSON (tutoriel image et texte, simple et brut )

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