Maison > interface Web > js tutoriel > Notes d'étude JavaScript (3) : JavaScript a également une entrée Compétences principales de function_javascript

Notes d'étude JavaScript (3) : JavaScript a également une entrée Compétences principales de function_javascript

WBOY
Libérer: 2016-05-16 15:39:42
original
2044 Les gens l'ont consulté

En C et Java, il existe une fonction ou une méthode d'entrée pour le programme, c'est-à-dire la fonction principale ou la méthode principale. En JavaScript, le programme démarre à partir de l'en-tête du fichier source JS. Mais dans un sens, nous pouvons toujours constituer une fonction principale comme point de départ du programme, de cette façon, non seulement il peut être unifié avec d'autres langages, mais peut-être que vous aurez une compréhension plus approfondie de JS.

1. Entrée réelle

Lorsqu'un fichier JavaScript est transmis au moteur JS pour exécution, le moteur JS exécute chaque instruction une par une de haut en bas jusqu'à ce que tout le code soit exécuté.

2. Chaîne de portée, portée globale et objet global

Nous savons que chaque fonction de JS créera une nouvelle portée une fois exécutée. Plus précisément, une nouvelle portée sera créée lorsque le processus d'exécution entrera dans la fonction, et cette portée sera détruite lorsque l'exécution de la fonction se terminera et se terminera. Les paramètres formels et les variables locales de la fonction seront liés à cette portée lorsque l'appel de fonction terminera la destruction de la portée, ils seront détruits en conséquence. Bien entendu, dans des cas particuliers, si certaines variables de la portée sont encore référencées au retour de la fonction, la portée et ces variables référencées ne seront pas détruites, formant ce qu'on appelle une fermeture.

D'un autre côté, nous savons que les fonctions peuvent être imbriquées, donc les portées peuvent également être imbriquées. Lorsqu'une fonction est définie, le moteur JS définira un attribut intégré appelé [[scope]] pour chaque fonction, qui pointe vers la portée lexicale de la fonction externe. De cette manière, plusieurs portées forment une structure de chaîne appelée chaîne de portées. Normalement, il n'y a qu'une seule chaîne de portées à la fois, c'est-à-dire qu'elle part de la portée de la fonction en cours d'exécution et remonte couche par couche jusqu'à la portée globale la plus externe.

[Remarque] : Les fonctions sur la chaîne de portée sont des fonctions imbriquées couche par couche dans le code source JS. Elles n'ont rien à voir avec l'ordre dans lequel les fonctions sont exécutées ou avec la pile d'appels de fonction. l'origine du nom portée lexicale.

La portée globale est une portée spéciale. Ce n'est pas une portée de fonction, mais c'est la portée externe de toutes les portées de fonction et le point final de toutes les chaînes de portée. Par conséquent, tant que le programme ne se termine pas, la portée globale existe toujours et les variables de la portée globale sont toujours valides.

[Portée de la fonction 3]-->[Portée de la fonction 2]-->[Portée de la fonction 3]-->[Portée globale]

De plus, correspondant à la portée globale, il existe un objet global. Dans le navigateur, l'objet global est l'objet window. L'objet global est un objet spécial :

Les variables définies dans la portée globale seront liées à l'objet global.

Les variables définies dans n'importe quelle portée, si elles sont définies sans le mot-clé var, seront liées à l'objet global.

Dans la portée globale, cela pointe vers l'objet global.

Il ressort des caractéristiques énumérées ci-dessus que si la portée globale est considérée comme un objet, alors il s'agit en fait de l'objet global. De plus, cela explique également pourquoi les quatre affirmations suivantes sont équivalentes dans le périmètre global :

var a = 1;
a = 1;
window.a = 1;
this.a = 1;
Copier après la connexion

3. Fonction principale imaginaire

Puisqu'il s'agit tous de périmètres, pourquoi avons-nous besoin d'un périmètre global spécial ? Nous préférons toujours la simplicité et la cohérence et essayons d’éviter la complexité et la spécificité. Alors naturellement, nous nous demandons si nous pouvons faire en sorte que la portée globale soit identique à la portée de la fonction ? La réponse est oui. On peut penser à ça :

Nous imaginons que lorsque le moteur JS exécute le fichier source, il encapsulera le code du fichier dans une fonction appelée main. Utilisez ensuite cette fonction principale comme point d’entrée du programme.
Autrement dit, supposons qu'il y ait un code comme celui-ci dans un fichier JS :

var a = 1;
var b = 2;

function add(x, y) {
  var z = x + y;
  return z;
}
console.log(add(a, b));
Copier après la connexion

Le moteur JS enveloppera le programme dans une fonction principale avant de commencer à s'exécuter :

// 虚构的main函数
function main() {
  var a = 1;
  var b = 2;

  function add(x, y) {
    var z = x + y;
    return z;
  }

  console.log(add(a, b));
}
Copier après la connexion

Ensuite, appelez cette fonction principale :

main._current_scope_ = window; // 将全局作用域(对象)设为window
main.call(window) // 将this指向window
Copier après la connexion

4. Quelle est la signification ?

(1) JS a également la fonction d'entrée main, qui est cohérente avec les autres langages.

(2) Le concept de portée globale est omis, ou la portée globale devient la portée de la fonction.

(3) Grâce au processus d'appel ci-dessus de la fonction principale, nous pouvons comprendre l'origine des propriétés spéciales dans la portée globale.

(4) Le dernier point est de traiter tout le code source JS comme une fonction pour ouvrir la voie à la file d'attente d'événements et à la boucle d'événements plus tard.

Ci-dessus sont les notes d'étude JavaScript (3) présentées par l'éditeur : JavaScript a également la fonction principale d'entrée, j'espère que vous l'aimerez.

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal