Saya tidak dapat memahami 3 aturan dalam spesifikasi terlalu baik - berharap untuk memiliki sesuatu yang lebih sederhana dalam bahasa Inggris - tetapi di sini adalah apa yang saya kumpulkan dari JavaScript: Panduan Definitif, Edisi 6, David Flanagan, O'Reilly, 2011:
Mengutip:
JavaScript tidak memperlakukan setiap jeda baris sebagai titik koma: ia biasanya memperlakukan jeda baris sebagai titik koma hanya jika tidak dapat menguraikan kode tanpa titik koma.
Kutipan lain: untuk kode
var a
a
=
3 console.log(a)
JavaScript tidak memperlakukan jeda baris kedua sebagai titik koma karena dapat melanjutkan penguraian pernyataan yang lebih panjang a = 3;
dan:
dua pengecualian pada aturan umum bahwa JavaScript menginterpretasikan baris terputus sebagai titik koma ketika tidak dapat menguraikan baris kedua sebagai kelanjutan dari pernyataan di baris pertama. Pengecualian pertama melibatkan pernyataan kembali, istirahat, dan melanjutkan
... Jika jeda baris muncul setelah kata-kata ini ... JavaScript akan selalu mengartikan jeda baris itu sebagai titik koma.
... Pengecualian kedua melibatkan operator ++ dan −− ... Jika Anda ingin menggunakan salah satu dari operator ini sebagai operator postfix, mereka harus muncul pada baris yang sama dengan ekspresi yang mereka gunakan. Jika tidak, jeda baris akan diperlakukan sebagai titik koma, dan ++ atau - akan diuraikan sebagai operator awalan yang diterapkan pada kode yang mengikuti. Pertimbangkan kode ini, misalnya:
x
++
y
Diuraikan sebagai x; ++y;
, bukan sebagaix++; y
Jadi saya pikir untuk menyederhanakannya, itu berarti:
Secara umum, JavaScript akan memperlakukannya sebagai kelanjutan dari kode selama itu masuk akal - kecuali 2 kasus: (1) setelah beberapa kata kunci seperti return
, break
, continue
, dan (2) jika melihat ++
atau --
pada baris baru, maka akan menambah yang ;
pada akhir baris sebelumnya.
Bagian tentang "memperlakukannya sebagai kelanjutan dari kode selama itu masuk akal" membuatnya terasa seperti pencocokan serakah ekspresi reguler.
Dengan kata di atas, itu artinya untuk return
dengan istirahat baris, penerjemah JavaScript akan menyisipkan;
(dikutip lagi: Jika satu baris muncul setelah salah satu dari kata-kata ini [seperti return
] ... JavaScript akan selalu menafsirkan garis tersebut sebagai titik koma)
dan karena alasan ini, contoh klasik dari
return
{
foo: 1
}
tidak akan berfungsi seperti yang diharapkan, karena penerjemah JavaScript akan memperlakukannya sebagai:
return; // returning nothing
{
foo: 1
}
Tidak boleh ada line-break segera setelah return
:
return {
foo: 1
}
agar berfungsi dengan benar. Dan Anda dapat menyisipkan ;
diri Anda jika Anda mengikuti aturan menggunakan ;
setelah pernyataan apa pun:
return {
foo: 1
};