En JS, a menudo encuentras situaciones en las que se llaman otras funciones en las funciones. En este momento, habrá un método de llamadas como FN (), y otro es un método de llamada como return fn (). Algunos principiantes a menudo están confundidos por estos dos métodos. Aquí utilizamos una elegante pregunta de entrevista para analizar las diferencias entre los dos métodos.
var i = 0; función fn () {i ++; if (i <10) {fn (); } else {return i; }} var resultado = fn (); console.log (resultado);Esta es una pregunta de entrevista con dificultades ocultas. Parece muy simple. La mayoría de las personas pueden responder 10 sin pensar. De hecho, se puede ver que lo imprimido es indefinido. Esta pregunta de trampa refleja intuitivamente el problema mencionado anteriormente. Cuando modificamos la línea que ejecuta FN a:
var i = 0; función fn () {i ++; if (i <10) {return fn (); } else {return i; }} var resultado = fn (); console.log (resultado);En este momento, encontrará que el resultado impreso es 10.
¿Por qué hay una gran diferencia entre agregar o no agregar un regreso aquí?
La razón principal aquí es muy simple. Las funciones de JavaScript tienen valores de retorno predeterminados. Si la función no escribe retorno al final, Undefined se devolverá de forma predeterminada. Es por eso que en la consola Chrome, al escribir código, una línea de indefinida a menudo aparece a continuación.
Echemos un vistazo más de cerca a este ejemplo. Cuando aumenta a 9, es la segunda vez cuando FN se llama recursivamente para el penúltimo tiempo. Si no hay devolución, después de que FN se ejecuta esta vez, el retorno indefinido de forma predeterminada, y la próxima recursión no continuará. Cuando se agrega regreso, la última recursión continuará aquí, es decir, cuando i = 10, salte a otra vez y regrese para obtener los 10 correctos.
Hablando de esto, podemos extender un ejemplo más clásico, el famoso método de búsqueda binaria :
var mid = Math.floor ((arr.length - 1) / 2); Function Search (n, mid) {if (n> arr [mid]) {mid = math.floor ((mid + arr.length) / 2); Search de retorno (n, medio); } else if (n <arr [mid]) {Mid = Math.Floor ((Mid - 1) / 2); Search de retorno (n, medio); } else {return Mid; }} var index = search (n, mid); console.log (index);El método de búsqueda binaria también requiere múltiples llamadas recursivas. Muchos novatos a menudo cometen errores al implementar este algoritmo por primera vez. Es olvidar agregar retorno antes de la función recursiva, lo que eventualmente lleva al resultado de retorno a ser indefinido. La razón aquí es similar a la anterior. Si no agrega retorno, hará que regrese indefinido directamente después de la recursión, y no continuará con la próxima recursión.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.