Apa perbedaan dan / atau keuntungan, jika ada, menggunakan koma saat mendeklarasikan sekelompok variabel daripada titik koma.
Sebagai contoh:
var foo = 'bar', bar = 'foo';
melawan
var foo = 'bar';
var bar = 'foo';
Saya tahu bahwa jika Anda menentukan var
kata kunci pada variabel pertama pada contoh pertama , kata kunci tersebut tetap ada di semua variabel, sehingga keduanya menghasilkan hasil akhir yang sama terkait ruang lingkup. Apakah ini hanya preferensi pribadi, atau adakah manfaat kinerja untuk melakukannya dengan cara apa pun?
sumber
Setelah membaca Crockford dan lainnya, saya mulai merangkai variabel saya dengan koma secara eksklusif. Kemudian, saya benar-benar kesal dengan debugger Chrome DevTools yang tidak berhenti pada definisi variabel dengan koma. Untuk debugger, definisi variabel yang dirantai dengan koma adalah pernyataan tunggal, sedangkan beberapa pernyataan var adalah beberapa pernyataan yang dapat dihentikan debugger. Oleh karena itu, saya beralih kembali dari:
var a = doSomethingA, b = doSomethignB, c = doSomethingC;
Untuk:
var a = doSomethingA; var b = doSomethignB; var c = doSomethingC;
Sekarang, saya menemukan varian kedua jauh lebih bersih, belum lagi keuntungannya dalam menyelesaikan masalah debugger.
Argumen "kurangi kode melalui kabel" tidak persuasif, karena ada minifier.
sumber
debugger
ke sana, lalu menambahkan yang lainvar
dan tetap mengikatnya dengan koma. Kemudian ketika saya selesai debugging saya kembali dan menghapusdebugger
dan ekstravar
.Saya lebih suka
var-per-variable
notasi:var a = 2 var b = 3
karena
comma-instead-of-another-var
notasi lain memiliki tiga kekurangan berikut:1. Sulit untuk dipelihara
Perhatikan kode ini:
var a = 1, b = mogrify(2), c = 3
Tapi, hei, apa yang dilakukan mogrify? Mari cetak b untuk mencari tahu:
var a = 1, b = mogrify(2), console.log(b) c = 3
merusak barang
2. Sulit dibaca
Variabel dalam mengemis baris dengan jelas mengkomunikasikan bahwa akan ada variabel baru yang dimulai.
var get_all_unicorn_promise = db.get_all_unicorns((unicorn) => { unicorn.legs.map((leg) => { leg.log('yes') }) }).sort(), c = 3
Apa yang
c = 3
dilakukan di sana kan?3. Tidak konsisten
Pertimbangkan ini:
var a = 1, b = 2, c = 3
Dengan
var-per-variable
setiap deklarasi, ikuti struktur yang sama. Dengancomma-instead-of-another-var
variabel pertama dideklarasikan dengan cara yang berbeda dari yang lain. Jika Anda memutuskan untuk, katakanlah, pindahkan variabel pertama ke dalam a for cycle, Anda harus menambahkan var ke tengah deklarasiSelain preferensi, sepertinya sebagian besar proyek terkenal menggunakan
var-per-variable
notasisumber
Saya setuju dengan penjawab lain bahwa ini terutama masalah gaya pribadi. Tetapi untuk membawa opini "Otoritatif" ke dalam diskusi, inilah yang dikatakan Douglas Crockford di situs web alat JSLint yang populer :
sumber
let
konstruksi) memang memiliki cakupan blok.let
dapat digunakan lebih dari sekedar Mozilla JS ( lihat di sini ). Ini adalah bagian dari spesifikasi ES6 , tetapi sebagian besar browser masih bekerja untuk mengimplementasikan fitur ES6.Seperti yang telah dicatat orang lain, ini adalah preferensi gaya. JSLint mungkin memberitahu Anda untuk hanya memiliki satu
var
per fungsi (jika Anda menggunakan "Good Parts"). Jadi, jika menggunakan JSLint untuk memeriksa kode Anda (bukan ide yang buruk, IMHO), Anda akan lebih sering menggunakan format pertama daripada yang terakhir.Di sisi lain, penulis yang sama, Douglas Crockford , mengatakan untuk menempatkan setiap variabel di barisnya sendiri dalam konvensi pengkodeannya . Jadi, Anda mungkin ingin menghapus centang pada kotak centang "Semua satu
var
per fungsi" di JSLint jika Anda menggunakannya. ;-)sumber
var
pernyataan terpisah atau dirantai dengan koma.)Saya rasa tidak ada perbedaan yang mencolok, sejauh yang saya tahu itu hanya preferensi pribadi.
Saya benci memiliki beberapa deklarasi var, jadi saya biasanya melakukan:
var one ,two ,three ,four ;
Karena lebih pendek dan bisa dibilang lebih mudah dibaca, tidak ada
var
suara untuk dilihat.sumber
var one, two, three four;
sangat cepat. Menambahkan baris demi baris dalam Javascript bisa berbahaya (penerjemah JS dapat memasukkannya sendiri;
- jika Anda tidak mengantisipasi hal ini maka Anda akan segera menemukan efek sampingnya. Selain itu, menyebabkan,
bug me , kata kunci mendapatkan baris mereka sendiri bug saya, baris;
itu sendiri mengganggu saya. Apakah Anda dibayar per baris?var
deklarasi Anda . (Meskipun saya setuju dengan Anda tentang memimpin koma, dan tentangvar
dan titik koma terakhir berada di baris mereka sendiri - ketiganya juga mengganggu saya.)Karena saya tidak melihat referensi apa pun, berikut adalah tautan ke spesifikasi ECMA-262, yang merupakan spesifikasi dasar untuk JavaScript. Tata bahasa dari halaman itu mengatakan:
12.2 Variable Statement Syntax VariableStatement : var VariableDeclarationList ; VariableDeclarationList : VariableDeclaration VariableDeclarationList , VariableDeclaration VariableDeclarationListNoIn : VariableDeclarationNoIn VariableDeclarationListNoIn , VariableDeclarationNoIn VariableDeclaration : Identifier Initialiseropt VariableDeclarationNoIn : Identifier InitialiserNoInopt Initialiser : = AssignmentExpression InitialiserNoIn : = AssignmentExpressionNoIn
Apa yang dapat Anda peroleh dari ini menggunakan koma atau tidak, tidak masalah. Either way, itu akhirnya diurai sebagai
VariableDeclaration
dan diperlakukan persis sama. Seharusnya tidak ada perbedaan tentang cara mesin skrip memperlakukan kedua deklarasi tersebut. Satu-satunya perbedaan adalah yang telah disebutkan dalam jawaban lain - menghemat lebih banyak ruang dan perbedaan praktis tak terukur dalam jumlah waktu yang diperlukan untuk menerapkan tata bahasa untuk menemukan semuaVariableDeclarations
saat skrip dikompilasi.sumber
Yang pertama menyimpan beberapa karakter - jadi ada penghematan yang sangat kecil dalam hal ukuran file JS dan karenanya konsumsi bandwidth. Satu-satunya saat hal ini menjadi penting adalah dalam kasus yang ekstrim.
sumber
Saya lebih suka versi kedua (masing-masing memiliki versi sendiri
var
). Saya pikir itu karena saya berasal dari latar belakang C ++. Dalam C ++, Anda dapat mendeklarasikan variabel seperti yang Anda lakukan pada contoh pertama Anda, tetapi tidak disukai (ini dengan mudah menyebabkan kesalahan saat Anda mencoba membuat petunjuk seperti itu).sumber
Jika Anda memperkecil javascript, ada keuntungan yang cukup besar:
var one, two, three, four;
menjadi
var a, b, c, d;
Dimana
var one; var two; var three; var four;
menjadi
var a; var b; var c; var d;
Itu adalah tiga contoh tambahan
var
, yang dapat bertambah seiring waktu.Lihat seri artikel "A List Apart" "Better Javascript Minification" Bagian 1 dan Bagian 2
sumber
var
melakukan gzip , pengulangan s tidak akan sangat meningkatkan ukuran file gzip (jika saya memahami gzip dengan benar).