Jackson telah sebagian menjawab ini dalam pertanyaan serupa:
Pengembalian tersirat, tetapi hanya jika tidak ada blok.
- Ini akan menghasilkan kesalahan ketika satu-baris diperluas ke beberapa baris dan programmer lupa untuk menambahkan
return
.
- Pengembalian implisit sintaksis ambigu.
(name) => {id: name}
mengembalikan objek {id: name}
... kan? Salah. Ia kembali undefined
. Kawat gigi itu adalah blok eksplisit. id:
adalah label.
Saya akan menambahkan definisi blok :
Pernyataan blok (atau pernyataan majemuk dalam bahasa lain) digunakan untuk mengelompokkan nol atau lebih pernyataan. Blok dibatasi oleh sepasang kurung keriting.
Contoh :
// returns: undefined
// explanation: an empty block with an implicit return
((name) => {})()
// returns: 'Hi Jess'
// explanation: no block means implicit return
((name) => 'Hi ' + name)('Jess')
// returns: undefined
// explanation: explicit return required inside block, but is missing.
((name) => {'Hi ' + name})('Jess')
// returns: 'Hi Jess'
// explanation: explicit return in block exists
((name) => {return 'Hi ' + name})('Jess')
// returns: undefined
// explanation: a block containing a single label. No explicit return.
// more: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label
((name) => {id: name})('Jess')
// returns: {id: 'Jess'}
// explanation: implicit return of expression ( ) which evaluates to an object
((name) => ({id: name}))('Jess')
// returns: {id: 'Jess'}
// explanation: explicit return inside block returns object
((name) => {return {id: name}})('Jess')
name
,, dengan fungsi terlampir dalam tanda kurung dan dipanggil dengan satu argumen, "Jess". Kode antara=>
dan)('Jess')
dalam setiap kasus adalah badan fungsi panah. Anggap saja sebagai bentuk singkat dari Ekspresi Fungsi yang Segera Diminta dari formulir(function (name) { return { id: name } })('Jess')
{}
) atau blok , itu mengasumsikan bahwa{ }
menunjukkan suatu blok. Itu berarti bahwa ketika dilihatid: name
, ia berpikirid:
adalah ekspresi yang menciptakan label (fitur JS yang sangat jarang digunakan yang berhubungan dengan kontrol aliran dan penggunaan a:
), dan kemudian yangname
berikutid:
hanyalah pernyataan terpisah yang hanya berisi variabelname
(& tidak melakukan apa-apa).Saya mengerti aturan praktis ini ...
Calon adalah:
Untuk operasi lain (lebih dari satu-liner yang memerlukan blok, return harus eksplisit
sumber
Ada kasus lain di sini.
Saat menulis komponen fungsional dalam Bereaksi, Anda dapat menggunakan tanda kurung untuk membungkus JSX yang dikembalikan secara implisit.
sumber
Ini kasus lain yang memberiku masalah.
Di sini kita mendefinisikan suatu fungsi yang mengembalikan fungsi anonim. Bit "yang rumit" adalah bahwa badan fungsi untuk fungsi luar (bagian yang diawali dengan (bar) => ...) secara visual tampak seperti "blok", tetapi sebenarnya tidak. Karena tidak, pengembalian secara implisit akan dimulai.
Inilah cara wrap akan dijalankan:
Cara saya membongkar ini untuk memastikan saya mengerti itu adalah untuk "tidak menjelaskan" fungsi.
Berikut ini ekuivalen semantik dari blok kode pertama, cukup membuat tubuh wrap () melakukan pengembalian eksplisit. Definisi ini menghasilkan hasil yang sama seperti di atas. Di sinilah titik-titik terhubung. Bandingkan blok kode pertama di atas dengan yang di bawah ini, dan jelas bahwa fungsi panah itu sendiri diperlakukan sebagai ekspresi, bukan blok, dan memiliki pengembalian tersirat .
Versi bungkus yang sepenuhnya tidak berbentuk akan seperti ini, yang walaupun tidak sekompak versi panah gemuk, tampaknya jauh lebih mudah untuk dipahami.
Pada akhirnya, untuk orang lain yang mungkin harus membaca kode saya, dan masa depan saya, saya pikir saya lebih suka untuk pergi versi non panah yang dapat dipahami secara visual pada pandangan pertama, daripada panah yang mengambil sedikit berpikir (dan dalam eksperimen kasus saya) untuk grok.
sumber
Fungsi panah memungkinkan Anda memiliki pengembalian implisit: nilai dikembalikan tanpa harus menggunakan
return
kata kunci.Ini berfungsi ketika ada pernyataan on-line di badan fungsi:
Contoh lain, mengembalikan objek (ingat untuk membungkus kurung keriting dalam tanda kurung untuk menghindari itu dianggap sebagai tanda kurung fungsi tubuh pembungkus):
sumber