En primer lugar, hay un concepto: no es un lenguaje que admita funciones. Este lenguaje se puede llamar "lenguaje funcional". Además de ser llamadas, las funciones en lenguajes funcionales también tienen otras propiedades. Hay tres puntos:
1. Las funciones son operandos
2. Guardar datos dentro de la función.
3. Las operaciones dentro de la función no tienen efectos secundarios fuera de la función.
1. Las funciones son operandos
Cuando se llama a una función normal, se puede entender de manera abstracta como: la función es un operador y los parámetros pasados son operandos;
Pero cuando una función en JavaScript se usa como parámetro de otra función, se pasa una referencia y este "parámetro entrante" puede entenderse como un operando. La conclusión es que las funciones (como "parámetros entrantes") tienen el significado de operandos, y los "parámetros de función" no son diferentes de los parámetros ordinarios.
2. Guardar datos dentro de la función.
En lenguajes imperativos, las variables privadas (variables locales) dentro de funciones no se pueden guardar. Desde la perspectiva de la ejecución del programa, las variables locales se asignan en la pila y, una vez finalizada la ejecución de la función, se libera la pila ocupada. Por lo tanto, los datos dentro de la función no se pueden guardar.
En una función de JavaScript, las variables privadas dentro de la función se pueden modificar y al "ingresar" nuevamente a la función, el estado modificado continuará. El siguiente ejemplo ilustra esta característica:
Copie el código de código de la siguiente manera:
var conjunto, obtener;
función MiFunc(){
valor var = 100;
función establecer_valor(v){
valor = v;
}
función obtener_valor(){
valor de retorno;
}
establecer = establecer_valor;
obtener = obtener_valor;
}
MiFunc();
consola.log(get()); //100
conjunto(300);
consola.log(get()); //300
Un beneficio obvio es que si un dato puede persistir dentro de una función, entonces la función (como constructor) puede usar los datos para realizar operaciones cuando se asigna a una instancia y entre múltiples instancias, ya que los datos existen en diferentes In; cierre, no se afectarán entre sí.
Para explicarlo en términos orientados a objetos, significa que diferentes instancias tienen sus propios datos privados (copiados de algunos datos públicos). El siguiente ejemplo ilustra esta característica:
Copie el código de código de la siguiente manera:
función MiObjeto(){
valor var = 100;
this.setValue = función(){
valor = v;
}
this.showValue = función(){
consola.log(valor);
}
}
var obj1 = nuevo MiObjeto();
var obj2 = nuevo MiObjeto();
obj2.setValue(300);
obj1.showValue(); //100;
3. Las operaciones dentro de la función no tienen efectos secundarios fuera de la función.
El significado de esta característica es:
* La función utiliza el parámetro de entrada para realizar operaciones sin modificarlo (se utiliza como parámetro de valor en lugar de parámetro variable)
* El valor de otros datos fuera de la función (como variables globales) no se modificará durante la operación.
* Una vez completada la operación, el valor se transfiere al sistema externo mediante la "función de retorno"
Estas funciones no tienen efectos secundarios sobre el sistema externo durante el funcionamiento. Sin embargo, notamos que JavaScript permite hacer referencia a variables globales y modificarlas dentro de funciones, e incluso se pueden declarar variables globales. En realidad, esto destruye sus características funcionales.
Además, JavaScript también permite modificar miembros de objetos y matrices dentro de funciones; estos miembros deben modificarse mediante métodos de objetos en lugar de otras funciones fuera del sistema de objetos.
Entonces: esta característica de JavaScript solo puede garantizarse mediante los hábitos de programación de los desarrolladores.