Jawaban:
Ya, return
hentikan eksekusi dan keluar dari fungsi. return
selalu ** segera keluar dari fungsinya, tanpa eksekusi lebih lanjut jika berada di dalam for loop.
Mudah diverifikasi untuk diri sendiri:
function returnMe() {
for (var i=0; i<2; i++) {
if (i === 1) return i;
}
}
alert(returnMe());
// 1
** Catatan: Lihat jawaban lain ini tentang kasus khusus try/catch/finally
dan jawaban ini tentang bagaimana forEach loop memiliki ruang lingkup fungsi sendiri tidak akan keluar dari fungsi yang berisi.
return
masih kembali dari iterasi fungsi callback saat ini, dalam cakupannya sendiri, tetapi tidak diharapkan untuk keluar dari seluruh metode pemanggilan forEach()
. Jadi itu tidak kembali dari loop itu sendiri , tetapi kembali dari callback loop dijalankan. Dalam contoh kode dari pertanyaan yang ditautkan, output 1,2,4,5
dilewati 3
karena pengembalian.
return
akan selalu kembali dari this
konteks saat ini .
break
dan kemudian return
.
Dalam kebanyakan kasus (termasuk yang ini), return
akan segera keluar. Namun, jika pengembalian berada di try
blok dengan blok yang menyertainya finally
, finally
selalu dijalankan dan dapat "menimpa" return
di 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
The return
pernyataan berhenti loop hanya jika itu dalam fungsi. Jika tidak, Anda akan mendapatkan kesalahan ini:
Uncaught SyntaxError: Illegal return statement(…)
Kode ini akan keluar dari loop setelah iterasi pertama dalam satu 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
}
kode di bawah ini akan melompat pada kondisi dan melanjutkan 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
}
Ya, begitu return
pernyataan dieksekusi, seluruh fungsi keluar pada saat itu juga.
Bayangkan saja apa yang akan terjadi jika tidak dan terus berulang, dan menjalankan return
pernyataan itu setiap kali? Itu akan membatalkan arti mengembalikan nilai ketika Anda memikirkannya.
Jawabannya adalah ya, jika Anda menulis kembali pernyataan kontrol segera kembali ke metode pemanggil. Dengan pengecualian pada akhirnya blok, yang dieksekusi setelah pernyataan kembali.
dan akhirnya juga dapat mengganti nilai yang telah Anda kembalikan, jika Anda kembali ke dalam akhirnya blok. LINK: Coba-tangkap-akhirnya-kembali klarifikasi
Pengembalian definisi Pernyataan sesuai:
Java Docs:
pernyataan kembali dapat digunakan untuk keluar dari blok aliran kontrol dan keluar dari metode
Dokumentasi MSDN:
Pernyataan pengembalian mengakhiri eksekusi fungsi dan mengembalikan kontrol ke fungsi panggilan. Eksekusi dilanjutkan dalam fungsi panggilan pada titik segera setelah panggilan.
Wikipedia:
Pernyataan pengembalian menyebabkan eksekusi meninggalkan subrutin saat ini dan melanjutkan pada titik dalam kode segera setelah tempat subrutin dipanggil, dikenal sebagai alamat pengirim. Alamat kembali disimpan, biasanya di tumpukan panggilan proses, sebagai bagian dari operasi membuat panggilan subrutin. Pernyataan pengembalian dalam banyak bahasa memungkinkan fungsi menentukan nilai kembali yang akan dikembalikan ke kode yang disebut fungsi.
"return" tidak keluar dari fungsi tetapi jika Anda ingin mengembalikan sejumlah besar data, Anda dapat menyimpannya dalam sebuah array dan kemudian mengembalikannya daripada mencoba mengembalikan setiap bagian data 1 per 1 dalam loop.