Tout d'abord, il y a un concept : ce n'est pas un langage qui supporte des fonctions. Ce langage peut être appelé un « langage fonctionnel ». En plus d'être appelées, les fonctions des langages fonctionnels ont également d'autres propriétés. Il y a les trois points suivants :
1. Les fonctions sont des opérandes
2. Enregistrez les données dans les fonctions
3. Les opérations dans les fonctions n'ont aucun effet secondaire en dehors de la fonction
1.
Lorsqu'une fonction normale est appelée, elle peut être comprise abstraitement comme : la fonction est un opérateur et les paramètres transmis sont des opérandes
Mais lorsqu'une fonction en JavaScript est utilisée comme paramètre d'une autre ; fonction, Il est passé par référence, et ce "paramètre entrant" peut être compris comme un opérande. La conclusion est que les fonctions (en tant que « paramètres entrants ») ont la signification d’opérandes et que les « paramètres de fonction » ne sont pas différents des paramètres ordinaires.
2. Sauvegarde des données au sein de la fonction
Dans les langages impératifs, les variables privées (variables locales) au sein des fonctions ne peuvent pas être sauvegardées. Du point de vue de l'exécution du programme, les variables locales sont allouées sur la pile et une fois l'exécution de la fonction terminée, la pile occupée est libérée. Par conséquent, les données de la fonction ne peuvent pas être enregistrées.
Dans les fonctions JavaScript, les variables privées au sein de la fonction peuvent être modifiées, et lors de la « saisie » à nouveau de la fonction, l'état modifié continuera. L'exemple suivant illustre cette fonctionnalité :
fonction set_value(v){
valeur = v;
}
fonction get_value(){
valeur de retour;
}
set = set_value;
get = get_value;
}
MyFunc();
console.log(get()); > console.log(get()); //300
Un avantage évident est que si une donnée peut être conservée dans une fonction, alors la fonction (en tant que constructeur) peut être utilisée lorsqu'elle est affectée à une instance. Ces données effectuent des opérations ; et entre plusieurs instances, puisque les données existent dans des fermetures différentes, elles ne s'affecteront pas.
Donc : cette fonctionnalité de JavaScript ne peut être garantie que par les habitudes de programmation des développeurs.