1. L'espace mémoire en JS est divisé en deux types: la mémoire de pile et la mémoire du tas
Mémoire de pile: fournit un environnement pour l'exécution du code JS; stocke les valeurs des types de données de base; -> La portée globale ou la portée privée sont en fait de la mémoire de pile
Mémoire de tas: stocke la valeur du type de données de référence (l'objet stocke le nom d'attribut et la valeur d'attribut, et la fonction stocke le code dans le corps de la fonction comme une chaîne)
2.
3.
Declare -> Dites au navigateur que j'ai une telle chose, comme var num1; fonction fn;
Défini -> attribuer une valeur à la variable ou à la fonction déclarée, par exemple num1 = 12; fn = fonction () {}
[IMPORTANT] Les variables déclarent seulement qu'elles ne sont pas définies, la valeur par défaut n'est pas définie (non définie)
4. Le traitement de la VAR et de la fonction est différent au stade de pré-interprétation.
var -> Lorsque la pré-explication est effectuée, la variable est déclarée à l'avance. L'opération d'attribution ne sera terminée que lorsque le code est exécuté.
Fonction -> Pendant la pré-explication, toutes les déclarations et définitions seront terminées à l'avance (lorsque le code sera exécuté, il sera ignoré directement)
[IMPORTANT] Au début, seules les pré-interprétations sont effectuées sur la fenêtre. Les chaînes actuelles stockées dans la fonction FN sont toutes les chaînes, donc Var Total n'a pas de sens pratique, donc les pré-interprétations ne sont pas effectuées -> "Les pré-interprétations se produisent dans la portée actuelle"
Console.log (obj); // -> Undefined var obj = {name: "Zhang Shanshan", âge: 10}; fonction fn (num1, num2) {// sauter directement lorsque le code est exécuté sur cette ligne, car pendant la pré-explication, nous avons terminé la déclaration et la définition var total = num1 + num2; console.log (total); } var num1 = 12; fn (num1, 100); // exécuter fn, attribuer la valeur de la variable globale num1 au paramètre num1 et attribuer 100 au paramètre num25. La variable déclarée sous la portée globale est une variable globale
Les variables déclarées dans la portée privée sont des variables privées; Les paramètres formels de la fonction sont également des variables privées;
Comment savoir si les variables apparaissant dans une fonction sont privées ou globales?
Tout d'abord, voyez s'il s'agit d'un paramètre formel, puis voyez s'il a été déclaré dans la portée privée (a valu). L'un des deux est une variable privée. Alors, peu importe où il apparaît dans la fonction actuelle, il est privé et il n'y a pas de relation entre elle et le monde; Si cela non plus, cela signifie qu'il n'est pas privé, alors recherchez la portée précédente ...
6. Lorsque la fonction est exécutée, une nouvelle portée privée (mémoire de pile) sera formée pour que le code du corps de la fonction puisse exécuter;
1) attribuer une valeur aux paramètres formels
2) Pré-interprétation sous portée privée
3) Exécution du code sous portée privée
La nouvelle portée privée formée protège également les variables privées à l'intérieur des influences externes. Nous mettons ce mécanisme de protection de la fonction -> "Clôture
Différence: ceux avec VAR peuvent être déclarés avant l'exécution du code, tandis que ceux sans VAR ne peuvent pas être déclarés à l'avance
1. La pré-explication est requise, que les conditions soient vraies ou non.
Pré-explication de la fenêtre: var a; -> window.a; if (! ("a" dans la fenêtre)) {// "a" dans la fenêtre -> true var a = "us"; } console.log (a); // -> indéfini2. La pré-interprétation se produit uniquement sur le côté gauche de "=", seul le côté gauche est pré-interprétation, et le côté droit est la valeur sans pré-interprétation.
Fonction Expression des fonctions anonymes: attribuez la partie de la définition de la fonction comme une valeur à un événement qui est une variable ou un élément.
Lorsque pré-explication: var fn; -> La valeur par défaut de FN n'est pas définie
fn (); // -> Undefined () Uncauded TypeError: FN n'est pas une fonction seule que les fonctions peuvent être exécutées dans JS && Si le code ci-dessus ci-dessus est signalé, le code ci-dessous n'est pas exécuté sans aucun traitement spécial var fn = fonction () {console.log ("ok"); }; fn (); Lorsque la pré-explication: fn = xxxfff000 fn (); // -> "ok" fun fn () {console.log ("ok"); } fn (); // -> "ok" fonction fn () {console.log ("ok"); } fn (); // -> "ok"3. Le code en dessous du retour dans le corps de la fonction n'est plus exécuté, mais le code ci-dessous doit participer à la pré-explication; Et les choses derrière le retour doivent être traitées, mais comme elle est retournée en valeur, la pré-explication n'est pas effectuée;
var total = 300; fonction fn () {console.log (total); return function sum () {}; // return doit renvoyer la valeur dans la fonction à l'extérieur de la fonction, qui renvoie l'adresse de mémoire correspondant à la fonction à l'extérieur de la fonction, par exemple: return xxxfff111; Le code ci-dessous renvoie dans le corps de fonction n'exécute pas var total = 10; } fn ();4. La fonction de la fonction anonyme n'est pas pré-expliqué sous la portée globale.
La fonction auto-exécutée de la fonction anonyme: la définition et l'exécution sont terminées ensemble
(fonction (num) {}) (100);
5. Lorsque la pré-explication, si le nom est répété, il ne sera déclaré qu'une seule fois et non répété, mais l'affectation sera toujours répétée.
Si le nom d'une variable et le nom d'une fonction sont les mêmes que le nom d'une fonction en js, il est considéré comme répété
Pré-explication:
var fn; Declare fn = xxxfff000; [Déclaration] ne pas + définir fn = xxxfff111; [Déclaration] Don't + Definition -> fn = xxxfff111 var fn = 12; // window.fn = 12 fonction fn () {//window.fn=function () {}} fonction fn () {}Ce qui précède est toutes les compréhensions pertinentes sur la pré-explication JS que vous apportez par l'éditeur. J'espère que vous soutiendrez Wulin.com plus ~