Tout d’abord, il y a un concept : ce n’est pas un langage qui supporte des fonctions. Ce langage peut être qualifié de « langage fonctionnel ». En plus d'être appelées, les fonctions des langages fonctionnels ont également d'autres propriétés. Il y a trois points :
1. Les fonctions sont des opérandes
2. Enregistrez les données dans la fonction
3. Les opérations au sein de la fonction n'ont aucun effet secondaire en dehors de la fonction
1. Les fonctions sont des opérandes
Lors de l'appel d'une fonction normale, cela peut être compris de manière abstraite comme : la fonction est un opérateur et les paramètres transmis sont les opérandes ;
Mais lorsqu'une fonction en JavaScript est utilisée comme paramètre d'une autre fonction, une référence est passée, 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. Enregistrez les données dans la fonction
Dans les langages impératifs, les variables privées (variables locales) au sein des fonctions ne peuvent pas être enregistré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 une fonction 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é :
Copiez le code comme suit :
varset,get;
fonction MyFunc(){
valeur var = 100 ;
fonction set_value(v){
valeur = v ;
}
fonction get_value(){
valeur de retour ;
}
set = set_value;
obtenir = get_value ;
}
MaFunc();
console.log(get()); //100
ensemble (300);
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 utiliser les données pour effectuer des opérations lorsqu'elles sont affectées à une instance et entre plusieurs instances, puisque les données existent dans différents In ; fermeture, ils ne s’affecteront pas.
Pour l'expliquer en termes orientés objet, cela signifie que différentes instances ont leurs propres données privées (copiées à partir de certaines données publiques). L'exemple suivant illustre cette fonctionnalité :
Copiez le code comme suit :
fonction MonObjet(){
valeur var = 100 ;
this.setValue = fonction(){
valeur = v ;
}
this.showValue = fonction(){
console.log(valeur);
}
}
var obj1 = new MonObjet();
var obj2 = new MonObjet();
obj2.setValue(300);
obj1.showValue(); //100;
3. Les opérations au sein de la fonction n'ont aucun effet secondaire en dehors de la fonction
La signification de cette fonctionnalité est la suivante :
* La fonction utilise le paramètre d'entrée pour effectuer des opérations sans le modifier (utilisé comme paramètre de valeur plutôt que comme paramètre de variable)
* La valeur des autres données extérieures à la fonction (telles que les variables globales) ne sera pas modifiée pendant l'opération.
* Une fois l'opération terminée, la valeur est transférée au système externe via "retour de fonction"
De telles fonctions n'ont aucun effet secondaire sur le système externe pendant le fonctionnement. Cependant, nous avons remarqué que JavaScript permet de référencer et de modifier des variables globales à l'intérieur des fonctions, et que des variables globales peuvent même être déclarées. Cela détruit en fait ses caractéristiques fonctionnelles.
De plus, JavaScript permet également de modifier les membres d'objets et de tableaux au sein des fonctions - ces membres doivent être modifiés par des méthodes objet plutôt que par d'autres fonctions en dehors du système objet.
Donc : cette fonctionnalité de JavaScript ne peut être garantie que par les habitudes de programmation des développeurs.