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étationvar -> 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
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 fonction1) Attribution de valeurs aux paramètres formels
2) Pré-interprétation ; en portée privée3) 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 nonwindow预解释:var a; -> window.a; if (!("a" in window)) {//"a" in window -> true var a = "我们"; } console.log(a);//->undefined
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éefn();//->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"
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 JsDétails Parler du propriétés et méthodes de l'objet intégré Math en 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!