type provient de JavaScript et appartient à JavaScript.Pourquoi
Les langages de programmation avancés doivent-ils être convertis en instructions machine finales pour être exécutés. , peu importe si le JavaScript que nous écrivons est transmis au navigateur ou à l'exécution du nœud, il doit en fin de compte être exécuté par le CPU, nous avons donc besoin du moteur JavaScript pour nous aider à traduire le code JavaScript en instructions CPU pour exécuter
Ici, nous prenons WebKit car la colonne WebKit est en fait composée de deux parties :
WebCore : responsable de l'analyse HTML, de la mise en page, du rendu et d'autres travaux connexes
JavaScriptCore : analyse et exécution de l'environnement variable de code JavaScript
l'objet variable VO (Variable Object) Dans la dernière norme ECMA, VO a déjà un autre nom pour l'objet global VE
GO (Clobal Object) d'environnement variable et le contexte d'exécution global
AO (Activation Objece). ). ) inclut
JavaScript nous allouera de la mémoire lors de la définition des variables
JS alloue de la mémoire pour les types de données de base directement dans l'espace de pile pendant l'exécution ;
L'allocation de mémoire par JS pour les types de données complexes ouvrira un espace dans la mémoire du tas et fera référence à la variable de valeur de retour du pointeur de cet espace.
dû au fait que la taille de la mémoire est limitée , donc lorsque la mémoire ne l'est plus. nécessaire, nous devons le publier afin de libérer plus d'espace mémoire.
Le garbage collection en anglais est Garbage Collection ou GC.
Pour les objets qui ne sont plus utilisés, nous les appelons des déchets. Ils doivent être recyclés pour libérer plus d'espace mémoire. Notre environnement d'exécution de langage, tel que l'environnement d'exécution Java JVM et le moteur js de l'environnement d'exécution JavaScript, fera un garbage collector de mémoire, garbage collector, nous l'appelons également GC en abrégé, donc dans de nombreux endroits, vous voyez que GC fait en fait référence au garbage collector.
est la définition de la fermeture en informatique (Wikipedia) :
Fermeture (anglais : Closure), également connue sous le nom de fermeture lexicale (Lexical Closure) ou fermeture de fonction (function Closures) ;
Il s'agit d'une technologie qui implémente la liaison lexicale dans les langages de programmation prenant en charge des fonctions de première classe ;
En implémentation, la fermeture est une structure qui stocke une fonction et un environnement associé (équivalent à une table de recherche de symboles) ;
La plus grande différence entre une fermeture et une fonction est que lorsqu'une fermeture est capturée, ses variables libres seront déterminées au moment de la capture, afin qu'elle puisse s'exécuter comme d'habitude même si elle est hors contexte au moment de la capture
. le concept de fermeture est apparu dans les années 1960. Le premier programme à implémenter des fermetures était Scheme, nous pouvons donc comprendre pourquoi il existe des fermetures en JavaScript ;
Parce que de nombreuses conceptions en JavaScript sont dérivées de Scheme ;
Jetons un coup d'œil à l'explication de MDN sur les fermetures JavaScript :
Une fonction est groupée avec une référence à son état environnant (environnement lexical) (ou la fonction est entourée de références). En d'autres termes, une fermeture permet d'y accéder au sein d'une fonction interne. de sa fonction extérieure ;
qu'une
fonction est créée, la fermeture sera créée en même temps que la fonction est créée ;
var nom = 'pourquoi' âge variable = 18 barre de fonctions() { console.log('bar',nom) } return bar}var fun = foo()fun()
Résumé :
Une fonction ordinaire est une fermeture si elle peut accéder aux variables libres sur lesquelles agit la couche externe ;
D'un point de vue large : les fonctions en JavaScript sont des fermetures ;
D'un point de vue étroit : si une fonction en JavaScript accède à une variable externe, il s'agit d'une fermeture,
vers la portée globale :
Navigateur : fenêtre
Environnement de nœud : {}
La fonction flèche est une méthode d'écriture de fonctions ajoutée après ES6, et elle est plus concise que les expressions de fonction ;
Les fonctions fléchées ne lieront pas les attributs this et arguments ;
fonctions
fléchées ne peuvent pas être utilisées comme constructeurs (ne peuvent pas être utilisées avec new, une erreur sera générée).
est un (pseudo) tableau (de type tableau) correspondant aux paramètres passés à la fonction
Il existe un concept très important en programmation fonctionnelle appelé fonctions pures. JavaScript est conforme aux spécifications de la programmation fonctionnelle, il existe donc également le concept de fonctions pures
défini par Wikipedia :
En programmation, si une fonction remplit les conditions suivantes, alors cette fonction est appelée une fonction pure. Lorsque la fonction a la même valeur d'entrée, elle doit produire la même sortie. La sortie de la fonction n'a rien à voir avec d'autres informations cachées. ou des états autres que la valeur d'entrée. Les fonctions non liées à la sortie externe générée par les périphériques d'E/S ne peuvent pas avoir d'effets secondaires de fonction sémantiquement observables, tels que des « événements déclencheurs », provoquant la sortie des périphériques de sortie ou la modification du contenu des objets autres que les valeurs de sortie. . Résumé:
Une contribution déterminée doit produire un certain résultat ;
Lors de l'exécution d'une fonction, aucun effet secondaire ne peut survenir :
currying
Le currying est également un concept très important dans la programmation fonctionnelle. Wikipédia explique :
En informatique, Currying (Currying), également traduit par Currying ou Currying, est une fonction qui accepte plusieurs paramètres, devient une fonction qui reçoit un seul paramètre (le premier paramètre de la fonction d'origine), et renvoie une nouvelle fonction qui accepte le arguments restants et renvoie un résultat Réclamation Curried : si vous corrigez certains arguments, vous obtiendrez un
résumé de fonction qui accepte les arguments restants :
Transmettez seulement une partie des paramètres à la fonction pour l'appeler, et laissez-la renvoyer une zone de fonction pour traiter les paramètres restants ;
Ce processus est appelé curry.
Pourquoi le curry est nécessaire :
En programmation fonctionnelle, nous espérons souvent que le problème traité par une fonction est aussi simple que possible, au lieu de confier beaucoup de traitement à une fonction pour gérer
function foo(x,y,c) { retourner x + y + c } console.log(foo(10,20,30)) //Fonction Curry somme(x) { fonction de retour (y) { fonction de retour (z) { retourner x + y + z } } } var a = somme(10)(20)(30) console.log(a) //Simplifier le currying var sum2 = x => y => z => { retourner x + y + z } console.log(sum2(10)(20)(30))
Fonction
Par exemple, nous devons maintenant appeler une fonction sur certaines données et exécuter deux fonctions fn1 et fn2. Ces deux fonctions sont exécutées en séquence. Si nous devons appeler deux fonctions à chaque fois, l'opération apparaîtra répétitive. combiner ces deux fonctions et les appeler l'une après l'autre automatiquement ?
Ce processus est la combinaison de fonctions, que nous appelons Compose Function
avec instruction
.
+Fonction : Vous pouvez créer votre propre scope. Il n'est pas recommandé d'utiliser l'instruction with car elle peut être source d'erreurs de confusion et de problèmes de compatibilité
. '} // var message = "bonjour tout le monde" fonction foo() { barre de fonctions () { avec(obj2) { console.log(message) } } bar() } foo()
eval est une fonction spéciale qui peut exécuter la chaîne entrante sous forme de code JavaScript
var strFn = 'var message = "Hello world" console.log(message);'; eval(strFn)
Il n'est pas recommandé d'utiliser eval en développement :
La lisibilité du code d'évaluation est très mauvaise (la lisibilité du code est un principe important d'un code de haute qualité) ;
eval est une chaîne, elle peut donc être altérée pendant l'exécution, ce qui peut entraîner un risque d'attaque ;
L'exécution de eval doit passer par l'interpréteur JS et doit être optimisée par le moteur JS ;
le mode strict est un mode JavaScript restrictif, qui fait implicitement sortir le code du « mode bâclé » Lorsque les navigateurs prenant en charge le mode strict détectent le mode strict dans le code, ils surveilleront et exécuteront le code de manière plus stricte. Le mode strict éliminera certaines erreurs silencieuses d'origine en lançant des erreurs. Le mode strict permet au moteur Js d'effectuer davantage d'optimisations. lors de l'exécution périodique du code (pas besoin de gérer une syntaxe spéciale)
"use strict"; // Activer le mode strict var message = "hello world" console.log(message)
restrictions du mode strict <br/ > Nous parlons ici de certaines restrictions de syntaxe strictes en mode strict :
JavaScript est conçu pour faciliter le démarrage des développeurs novices. Par conséquent, une syntaxe incorrecte est parfois considérée comme analysée normalement. Cependant, en mode strict, ces erreurs seront traitées comme des erreurs afin que
// 1. Création accidentelle d'une variable globale message = "Bonjour tout le monde" console.log(message) fonction foo() { âge=20 } foo()Le mode strict
de Console.log(age)
//Erreur statique par défaut true.name ='xiaoluo'; NaN = 123
// Les paramètres de fonction ne peuvent pas avoir le même nom function foo(x,y,x) { console.log(x,y,x)}foo(10,20,30)
var num = 0o123 // Octal var num2 = 0x123 // Hexadécimal console.log(num,num2)
var obj2 = {name:'Tom',age:18,message:'obj2'}n'est pas autorisée
avec(obj2) { console.log(message) }
var de la couche supérieure strFn = 'var message = "Hello world" console.log(message);'; évaluation(strFn)En mode strict
console.log(message)
une fonction non définie foo() {. console.log(this) //non défini } foo()