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

May 16, 2016 pm 03:39 PM

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.

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Que dois-je faire si je rencontre l'impression de code brouillé pour les reçus en papier thermique frontal? Que dois-je faire si je rencontre l'impression de code brouillé pour les reçus en papier thermique frontal? Apr 04, 2025 pm 02:42 PM

Des questions et des solutions fréquemment posées pour l'impression de billets thermiques frontaux pour le développement frontal, l'impression de billets est une exigence commune. Cependant, de nombreux développeurs mettent en œuvre ...

Qui est payé plus de python ou de javascript? Qui est payé plus de python ou de javascript? Apr 04, 2025 am 12:09 AM

Il n'y a pas de salaire absolu pour les développeurs Python et JavaScript, selon les compétences et les besoins de l'industrie. 1. Python peut être davantage payé en science des données et en apprentissage automatique. 2. JavaScript a une grande demande dans le développement frontal et complet, et son salaire est également considérable. 3. Les facteurs d'influence comprennent l'expérience, la localisation géographique, la taille de l'entreprise et les compétences spécifiques.

Démystifier javascript: ce qu'il fait et pourquoi c'est important Démystifier javascript: ce qu'il fait et pourquoi c'est important Apr 09, 2025 am 12:07 AM

JavaScript est la pierre angulaire du développement Web moderne, et ses principales fonctions incluent la programmation axée sur les événements, la génération de contenu dynamique et la programmation asynchrone. 1) La programmation axée sur les événements permet aux pages Web de changer dynamiquement en fonction des opérations utilisateur. 2) La génération de contenu dynamique permet d'ajuster le contenu de la page en fonction des conditions. 3) La programmation asynchrone garantit que l'interface utilisateur n'est pas bloquée. JavaScript est largement utilisé dans l'interaction Web, les applications à une page et le développement côté serveur, améliorant considérablement la flexibilité de l'expérience utilisateur et du développement multiplateforme.

Comment fusionner les éléments du tableau avec le même ID dans un seul objet en utilisant JavaScript? Comment fusionner les éléments du tableau avec le même ID dans un seul objet en utilisant JavaScript? Apr 04, 2025 pm 05:09 PM

Comment fusionner les éléments du tableau avec le même ID dans un seul objet en JavaScript? Lors du traitement des données, nous rencontrons souvent la nécessité d'avoir le même ID ...

JavaScript est-il difficile à apprendre? JavaScript est-il difficile à apprendre? Apr 03, 2025 am 12:20 AM

Apprendre JavaScript n'est pas difficile, mais c'est difficile. 1) Comprendre les concepts de base tels que les variables, les types de données, les fonctions, etc. 2) Master la programmation asynchrone et les implémenter via des boucles d'événements. 3) Utilisez les opérations DOM et promettez de gérer les demandes asynchrones. 4) Évitez les erreurs courantes et utilisez des techniques de débogage. 5) Optimiser les performances et suivre les meilleures pratiques.

Comment réaliser des effets de défilement de parallaxe et d'animation des éléments, comme le site officiel de Shiseido?
ou:
Comment pouvons-nous réaliser l'effet d'animation accompagné d'un défilement de page comme le site officiel de Shiseido? Comment réaliser des effets de défilement de parallaxe et d'animation des éléments, comme le site officiel de Shiseido? ou: Comment pouvons-nous réaliser l'effet d'animation accompagné d'un défilement de page comme le site officiel de Shiseido? Apr 04, 2025 pm 05:36 PM

La discussion sur la réalisation des effets de défilement de parallaxe et d'animation des éléments dans cet article explorera comment réaliser le site officiel de Shiseido (https://www.shiseido.co.jp/sb/wonderland/) ...

Comment implémenter la fonction de glisser-déposer et de régler la fonction de réglage similaire à VScode dans le développement frontal? Comment implémenter la fonction de glisser-déposer et de régler la fonction de réglage similaire à VScode dans le développement frontal? Apr 04, 2025 pm 02:06 PM

Explorez la mise en œuvre de la fonction de glisser et de réglage du panneau de type VScode dans le frontal. Dans le développement frontal, comment implémenter un VScode comme ...

La différence dans Console.Log de sortie Résultat: Pourquoi les deux appels sont-ils différents? La différence dans Console.Log de sortie Résultat: Pourquoi les deux appels sont-ils différents? Apr 04, 2025 pm 05:12 PM

Discussion approfondie des causes profondes de la différence de sortie Console.log. Cet article analysera les différences dans les résultats de sortie de la fonction Console.log dans un morceau de code et expliquera les raisons derrière. � ...

See all articles