Respostas:
Sim, return
interrompe a execução e sai da função. return
sempre ** sai de sua função imediatamente, sem execução adicional se estiver dentro de um loop for.
É facilmente verificado por si mesmo:
function returnMe() {
for (var i=0; i<2; i++) {
if (i === 1) return i;
}
}
alert(returnMe());
// 1
** Notas: Veja esta outra resposta sobre o caso especial de try/catch/finally
e esta resposta sobre como os loops forEach têm seu próprio escopo de função não sairá da função que o contém.
return
ainda retorna da iteração atual do retorno de chamada da função, em seu próprio escopo, mas não seria esperado interromper todo o método de chamada forEach()
. Portanto, ele não está retornando do próprio loop , mas está retornando do retorno de chamada que o loop executa. No exemplo de código da pergunta vinculada, a saída está 1,2,4,5
ignorando o resultado 3
do retorno.
return
sempre retorne do this
contexto atual .
break
e então return
.
Na maioria dos casos (incluindo este), return
sairá imediatamente. No entanto, se o retorno estiver em um try
bloco com um finally
bloco acompanhante , o finally
sempre executará e poderá "substituir" o return
no try
.
function foo() {
try {
for (var i = 0; i < 10; i++) {
if (i % 3 == 0) {
return i; // This executes once
}
}
} finally {
return 42; // But this still executes
}
}
console.log(foo()); // Prints 42
A return
instrução interrompe um loop apenas se estiver dentro da função. Caso contrário, você receberá este erro:
Uncaught SyntaxError: Illegal return statement(…)
Este código sairá do loop após a primeira iteração em um for of
loop:
const objc = [{ name: 1 }, { name: 2 }, { name: 3 }];
for (const iterator of objc) {
if (iterator.name == 2) {
return;
}
console.log(iterator.name);// 1
}
o código abaixo pulará na condição e continuará em um for of
loop:
const objc = [{ name: 1 }, { name: 2 }, { name: 3 }];
for (const iterator of objc) {
if (iterator.name == 2) {
continue;
}
console.log(iterator.name); // 1 , 3
}
Sim, uma vez que o return
instrução é executada, a função inteira é encerrada nesse exato momento.
Imagine o que aconteceria se isso não acontecesse e continuasse repetindo e executando essa return
instrução a cada vez? Isso invalidaria o significado de retornar um valor quando você pensar sobre isso.
A resposta é sim, se você escrever a declaração de retorno, os controles voltarão imediatamente ao método de chamada. Com exceção do bloco finalmente, que é executado após a declaração de retorno.
e, finalmente, também pode substituir o valor que você retornou, se você retornar dentro do bloco finalmente. LINK: Esclarecimento de tentar pegar e finalmente retornar
Definição da declaração de retorno de acordo com:
Documentos do Java:
uma declaração de retorno pode ser usada para ramificar fora de um bloco de fluxo de controle e sair do método
Documentação do MSDN:
A instrução de retorno finaliza a execução de uma função e retorna o controle para a função de chamada. A execução continua na função de chamada no ponto imediatamente após a chamada.
Wikipedia:
Uma instrução de retorno faz com que a execução deixe a sub-rotina atual e continue no ponto do código imediatamente após o local de chamada da sub-rotina, conhecida como endereço de retorno. O endereço de retorno é salvo, geralmente na pilha de chamadas do processo, como parte da operação de fazer a chamada de sub-rotina. As instruções de retorno em vários idiomas permitem que uma função especifique um valor de retorno a ser passado de volta ao código que chamou a função.
"return" sai da função, mas se você deseja retornar grandes somas de dados, pode armazená-las em uma matriz e depois devolvê-las, em vez de tentar retornar cada pedaço de dados 1 por 1 no loop.