Como puede imaginar, hay muchas formas de ejecutar funciones anónimas inmediatamente. En resumen, hay tres formas típicas (hay otras formas, háganoslo saber):
Método uno
(función() {
//…
})();
Método 2
función vacía() {
//…
}();
Método tres
~función() {
//…
}();
Es posible que haya visto el Método 1 y el Método 2. Aquí explicamos principalmente el Método 3. Antes de explicar el tercer método, ahora repasamos la definición del operador "~" (negación de bits) en EMCAScript (página 72 de la quinta edición), una traducción simple:
Convierta el valor anterior en un entero de 32 bits combinando declaraciones con operadores. Ejecute la declaración después del operador y convierta la línea. El resultado es un entero de 32 bits y se devuelve.
Como se puede entender de lo anterior, de hecho, los operadores bit a bit pueden devolver inmediatamente el valor de la siguiente expresión. De hecho, otros operadores bit a bit pueden lograr este propósito, por ejemplo:
!función() {
//…
}();
etc. podemos lograr nuestro objetivo. Así que en realidad no hay otra razón para usar "~", es sólo que el código "se ve bien" :^)
La eficiencia no es tanto la eficiencia de ejecutar funciones anónimas de tres maneras, sino que es mejor analizar directamente la eficiencia de ejecución de cada operador. Entonces, comparemos y echemos un vistazo a las definiciones de "()" y "nulo" en la especificación EMCA.
Operadores de grupo (quinta edición, página 66)
Devuelve el resultado de la ejecución de una expresión.
vacío (página 70, 5ª edición)
La combinación de declaraciones con operadores devuelve indefinido
Dado que el operador de grupo también necesita ejecutar la declaración y devolver el valor devuelto por el bloque de declaración, en comparación con void, habrá múltiples operaciones para obtener el bloque de declaración (aunque no consume mucho rendimiento), por lo que en este caso el rendimiento de vacío es mejor que el del operador de grupo.
Comparando los dos, la comparación de rendimiento del método tres es obviamente menor que la de los dos primeros. En resumen, desde una perspectiva gramatical, entre los tres métodos de funciones anónimas anteriores, el método dos es mejor que el método uno y el método tres es el menos eficiente.
Resume y piensa en las ventajas entre los tres.
El método 1 es muy común y seguro, por lo que nadie lo culpará por usar este método. Sin embargo, los estudiantes que usan el método 1 a menudo pueden tener el "problema" de olvidarse de hacer coincidir los corchetes (especialmente cuando el bloque de declaración es muy largo). muchas veces se equivoca)
El uso de operadores bit a bit para ejecutar funciones anónimas está muy de moda y se utiliza para lucir atractivo. Muchos IDE (como IDEA) y herramientas de resaltado de sintaxis no admiten la tercera forma de escritura.
void es el más eficiente, pero siempre se siente muy inflado en comparación con las otras dos implementaciones (¿solo unos pocos caracteres más?)
Entonces
Teniendo en cuenta la cantidad de código y la eficiencia, es correcto usar el método uno en casos extremos donde es necesario guardar código adicional y usar el método tres para dar prioridad a la eficiencia. Entonces me gustaría explicar el uso del método dos aquí. De hecho, la diferencia de eficiencia entre los tres métodos es muy pequeña. Por lo tanto, es casi insostenible utilizar ese método basándose únicamente en la eficiencia.
El plan específico a adoptar debe considerarse en función de la situación real. Por ejemplo, a menudo uso el método tres porque 1. Es conveniente (solo agregue un carácter) 2. Hacer coincidir corchetes cuando la función es larga será vertiginoso 3. Es genial de usar, pero el método 3 a menudo me hace mirarlo. Miembros del equipo de código están preocupados.
Si tiene código básico basado en marco, como algunas bibliotecas de clases, usar el método 1 es el más seguro y fácil de entender para todos, por lo que es la opción más segura.
[Texto original: http://www.gracecode.com/archives/3004/ Muy bien, todos pueden aprender de ello