Raison de l'écriture:
Lors de l'écriture de fonctions dans JS, nous déclarons généralement une fonction sous forme de fonction de convention fn () {}. Lors de la lecture d'excellents plug-ins, nous ne pouvons pas nous empêcher de voir la création de fonctions telles que var fn = function () {}. Quelle est la différence entre eux? Aujourd'hui, nous parlerons de cette déclaration de fonction fascinante dans l'esprit de briser la casserole jusqu'à la fin.
Déclaration de fonction
Exemple de code de déclaration de fonction
La copie de code est la suivante:
fonction fn () {
console.log ('fn function exécution ..');
// code ..
}
De cette façon, nous déclarons une fonction nommée FN. Voici une pensée. Pensez-vous qu'il sera exécuté s'il est appelé sur cette fonction? Ou une erreur sera-t-elle signalée?
fn (); // appelle la fonction fn que nous avons déclaré auparavant
La copie de code est la suivante:
fonction fn () {
console.log ('fn function exécution ..');
// code ..
}
Résultat de sortie de la console:
Oui, la fonction FN peut être appelée pour le moment, alors résumons les raisons ici.
Résumer:
1: À l'heure actuelle, la fonction FN est le résultat d'une variable et est stockée dans une variable dans un contexte global par défaut (peut être vérifié par la fenêtre. Nom de la fonction)
2: Cette méthode est la déclaration de fonction, et elles sont déjà disponibles lors de la saisie de l'étape du contexte global et de l'entrée de l'étape d'exécution du code. PS: JavaScript initialisera l'environnement de contexte chaque fois qu'il entre dans la méthode (de Global → Local)
3: Il peut affecter les objets variables (affecter uniquement les variables stockées dans le contexte)
Expressions de fonction
Expression de fonction Exemple de code
La copie de code est la suivante:
var fn = fonction () {
console.log ('fn fonction [expression] déclare l'exécution ...')
// code ..
}
Nous déclarons donc une fonction anonyme et faisons donc remarquer sa référence à la variable FN?
Encore une fois, appelez-le une fois au-dessus et en dessous, les fonctions déclarées par cette expression pour voir les résultats de sortie de la console.
La copie de code est la suivante:
// Afin de voir clairement la sortie de la console, nous faisons une marque avant et après chaque appel pour augmenter la lisibilité.
console.log ('avant le début de l'appel ...');
fn ();
console.log («L'appel précédent se termine ...»);
var fn = fonction () {
console.log ('fn fonction [expression] déclare l'exécution ...')
// code ..
}
console.log ('l'appel commence après cela ...');
fn ();
console.log ('l'appel commence après cela ...');
Résultats de l'impression sur la console:
Vous pouvez voir que lorsque le code est exécuté pour la première fois lorsque la fonction fn () est appelée, l'invite est: FN n'est pas une fonction (FN n'est pas une méthode), et l'opération est terminée lorsqu'il rencontre une erreur.
Cela montre que lorsque FN () est appelé pour la première fois, la variable VAR FN n'existe pas en tant que propriété de l'objet global, et le contexte de fonction anonyme référencé par FN n'est pas initialisé, donc l'appel a échoué avant lui.
La copie de code est la suivante:
// Commentez d'abord la logique d'appel précédente, puis regardez la sortie de la console
// console.log ('avant le début de l'appel ...');
// fn ();
// console.log («L'appel précédent se termine ...»);
var fn = fonction () {
console.log ('fn fonction [expression] déclare l'exécution ...')
// code ..
}
console.log ('l'appel commence après cela ...');
fn (); // appelé après l'expression
console.log ('l'appel commence après cela ...');
Résultats de l'impression sur la console:
On peut voir qu'il est acceptable d'appeler la fonction d'expression après. Résumons pourquoi?
Résumer:
1: Tout d'abord, la variable elle-même n'existe pas en fonction, mais comme référence à une fonction anonyme (le type de valeur n'appartient pas à une référence)
2: Pendant l'étape d'exécution du code, lors de l'initialisation du contexte global, il n'existe pas en tant qu'attribut global, il ne provoquera donc pas la contamination des objets variables.
3: Ce type de déclaration est généralement courant dans le développement de plug-ins et peut également être utilisé comme un appel aux fonctions de rappel dans les fermetures.
Fonction fn () {} ne fait donc pas que var fn = fonction () {}, ils ont des différences essentielles.