No JS, você geralmente encontra situações em que outras funções são chamadas nas funções. No momento, haverá um método de chamada como FN (), e outro é um método de chamada como retornar fn (). Alguns iniciantes geralmente são confusos com esses dois métodos. Aqui, usamos uma pergunta elegante da entrevista para analisar as diferenças entre os dois métodos.
var i = 0; function fn () {i ++; if (i <10) {fn (); } else {return i; }} var resultado = fn (); console.log (resultado);Esta é uma pergunta de entrevista com armadilhas escondidas. Parece muito simples. A maioria das pessoas pode responder 10 sem pensar. De fato, pode -se observar que o que é impresso é indefinido. Essa questão de armadilha reflete intuitivamente o problema mencionado acima. Quando modificamos a linha executando o FN para:
var i = 0; function fn () {i ++; if (i <10) {return fn (); } else {return i; }} var resultado = fn (); console.log (resultado);No momento, você descobrirá que o resultado impresso é 10.
Por que há uma diferença tão grande entre adicionar ou não adicionar um retorno aqui?
O principal motivo aqui é muito simples. As funções JavaScript possuem valores de retorno padrão. Se a função não gravar retorno no final, indefinido será retornado por padrão. É por isso que no console do Chrome, ao escrever código, uma linha de indefinida geralmente aparece abaixo.
Vamos dar uma olhada mais de perto neste exemplo. Quando eu aumenta para 9, é a segunda vez que o FN é chamado recursivamente pelo penúltimo tempo. Se não houver retorno, depois que o FN for executado desta vez, retorne indefinido por padrão e a próxima recursão não continuará. Quando o retorno for adicionado, a última recursão continuará aqui, ou seja, quando eu = 10, entre e retornará para obter o 10 correto.
Falando nisso, podemos estender um exemplo mais clássico, o famoso método de pesquisa binária :
var mid = math.floor ((arr.length - 1) / 2); pesquisa de função (n, mid) {if (n> arr [mid]) {mid = math.floor (((mid + arr.length) / 2); Return Search (n, Mid); } else if (n <arr [mid]) {mid = math.floor ((MID - 1) / 2); Return Search (n, Mid); } else {return mid; }} var index = pesquisa (n, mid); console.log (index);O método de pesquisa binária também requer várias chamadas recursivas. Muitos novatos geralmente cometem erros ao implementar esse algoritmo pela primeira vez. É esquecer de adicionar retorno antes da função recursiva, que eventualmente leva ao resultado de retorno ser indefinido. O motivo aqui é semelhante ao anterior. Se você não adicionar retorno, ele fará retornar indefinido diretamente após a recursão e não continuará com a próxima recursão.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.