Saya menggunakan Netbeans untuk menambahkan komentar seperti profesional ke setiap fungsi, tulis saya. Jadi saya mulai dengan masing-masing /**
dan kemudian saya tekan Enter
untuk membiarkan Netbeans memenuhi skema komentar default untuk fungsi berikut.
Sampai sekarang saya hanya menggunakan ini untuk bahasa PHP dan dalam hal ini Netbeans selalu menambahkan @returns {type}
bagian dalam skema komentar saja, jika mengikuti fungsi PHP benar-benar menyertakan return
pernyataan. Pada apa yang disebut "prosedur" (fungsi yang tidak mengembalikan nilai apa pun) bagian ini hilang.
Hari ini saya mencoba hal yang sama untuk fungsi Javascript dan Netbeans menambahkan @returns {undefined}
bagian ke skema komentar meskipun fungsi berikut tidak mengembalikan apa pun.
Ini membuatku bingung. Apakah Netbeans menyarankan seperti ini, bahwa setiap fungsi Javascript harus mengembalikan sesuatu? Apa yang harus saya lakukan? Abaikan (atau hapus) bagian skema komentar itu atau ikuti saran (jika ini adalah saran sama sekali) dan tambahkan return false;
di akhir fungsi tersebut, meskipun itu tidak berguna bagi saya?
sumber
undefined
. Dalam banyak bahasa, hasil dari pernyataan terakhir dikembalikan (lebih berguna, IMO). Ini disebut pengembalian implisit .Jawaban:
Jawaban singkatnya tidak.
The nyata Jawabannya adalah ya: mesin JS harus diberitahu bahwa beberapa fungsi selesai usahanya, yang dilakukan oleh fungsi mengembalikan sesuatu. Ini juga mengapa, alih-alih "selesai" , sebuah fungsi dikatakan "telah kembali" .
Sebuah fungsi yang tidak memiliki pernyataan pengembalian eksplisit akan kembali
undefined
, seperti fungsi C (++) yang tidak memiliki nilai pengembalian dikatakan (dan tanda tangannya mencerminkan ini) untuk mengembalikanvoid
:Selain itu, di JS, seperti di sebagian besar bahasa lainnya, Anda bebas mengabaikan nilai kembalian suatu fungsi, yang sering dilakukan:
Pada tingkat yang sangat rendah, pengembalian diterjemahkan ke dalam semacam lompatan. Jika suatu fungsi benar-benar tidak menghasilkan apa pun , tidak akan ada cara untuk mengetahui apa dan kapan harus memanggil fungsi berikutnya, atau memanggil penangan kejadian dan sejenisnya.
Jadi untuk rekap: Tidak, fungsi JS tidak perlu mengembalikan apa pun sejauh kode Anda berjalan. Tapi sejauh menyangkut mesin JS: fungsi selalu mengembalikan sesuatu, baik itu secara eksplisit melalui
return
pernyataan, atau secara implisit. Jika suatu fungsi kembali secara implisit, nilai kembaliannya akan selalu tidak ditentukan.sumber
void
, ia tidak mengembalikan apa-apa, tetapi tanda tangannya mencerminkan ini melaluivoid
tipe pengembalian.return;
mungkin hanya berguna jika Anda perlu kembali lebih awal. tulisanreturn undefined;
mungkin menghasilkan hasil yang berbeda jikaundefined
ditetapkan ke nilai yang berbeda. Sebagian besar (jika tidak semua) browser akan menampilkan kesalahan saat Anda mencoba menetapkan ulang tidak ditentukan, tetapi secara teori, ini mungkin adalah contoh menggunakan node.jsvoid
pada bahasa lain (seperti C), di mana Anda dapat memiliki fungsi sepertivoid do_someting(int *arg)
, tetapi Anda tidak dapat memiliki variabel dengan tipevoid
. Di C,void
sebenarnya bukan tipe, jadi fungsi ini tidak mengembalikan apa pun, mereka hanya melompatTidak, pengembalian tidak perlu.
Tapi sebenarnya tidak ada pengembalian
undefined
sumber
Tidak, mereka tidak melakukannya. Memang benar bahwa jauh di dalam spesifikasinya, ini semua sedikit berbeda:
... tapi hasil memanggil masing-masing adalah sama:
undefined
. Jadi dalam istilah pragmatis:return
, Anda bisa membiarkan eksekusi kode "jatuh di akhir" fungsiundefined
, khususnya, Anda hanya menulisreturn;
return;
, atau diakhiri denganreturn undefined;
; semuanya terlihat persis sama dengan kode panggilan AndaRe the spec: Secara khusus, ketika eksekusi fungsi jatuh, dalam spesifikasi itu adalah penyelesaian "normal"; tetapi
return;
danreturn value;
keduanya merupakan penyelesaian "pengembalian" dengan nilai terkait (undefined
), yang (sangat sedikit) berbeda. Tetapi perbedaannya dihilangkan oleh semantik memanggil suatu fungsi , yang mengatakan:Jadi tidak ada perbedaan yang bisa Anda amati dalam kode.
sumber
Tidak, Anda tidak perlu mengembalikan sesuatu untuk setiap fungsi. Ini opsional dan terserah bagaimana Anda menulis logika kode Anda.
sumber