Tidak ada yang salah dalam menggunakan $
variabel. Saya tidak akan sengaja melakukannya pada setiap variabel, tapi itu masih sintaks yang valid. jQuery adalah salah satu contoh di mana $
digunakan sebagai nama variabel. Itu juga mengapa "Alat dev Chrome tidak selalu melihat ini adalah kesalahan Javascript" , karena tidak ada kesalahan di tempat pertama.
Jika Anda takut menulis kode seperti:
var demo = function demo() {
var a = 123;
...
$a = 456; // A new variable is created in global scope.
}
maka Anda harus menggunakan pemeriksa gaya, seperti jsLint , jsHint atau Google Closure Linter . Yang mana dari mereka? Terserah Anda untuk membuat pilihan. Untuk membantu Anda dengan itu, berikut adalah beberapa catatan:
Gaya
Google Closure Linter mengikuti Panduan Gaya JavaScript Google , yang diketahui dilakukan dengan cerdik. Menggunakan gaya yang terkenal untuk JavaScript atau salah satu dari enam bahasa lainnya adalah ide yang bagus: ketika Anda membagikan kode Anda atau menyewa pengembang baru, kemungkinan mereka sudah terbiasa dengan gaya ini.
Banyak pengembang yang akrab dengan gaya Douglas Crockford juga. Gaya ini dijelaskan secara terperinci dalam JavaScript: The Good Parts , sebuah buku yang layak dibeli oleh siapa saja yang bekerja dengan JavaScript.
Adapun jsHint, saya tidak bisa menemukan konvensi apa yang digunakan, dan situs web itu sendiri tampaknya tidak membicarakan masalah itu. Mungkin saya melewatkan sesuatu.
Didukung oleh IDE
Baik jsLint dan jsHint didukung oleh PhpStorm. Ini juga merupakan kasus Google Closure Linter.
Lingkungan Hidup
Google Closure Linter adalah salah satu dari serangkaian alat . Jika Anda sudah menggunakan Google Closure Compiler atau Google Closure Library , akan lebih baik untuk memilih Cluster Linter di atas alat lainnya.
Kekerasan
jsLint dikenal ketat. jsHint lebih permisif, yang tidak selalu merupakan hal yang baik. Misalnya, salah satu alasan untuk memotong jsLint untuk jsHint dijelaskan dalam artikel yang menunjukkan kode buruk yang akan menghasilkan kesalahan di jsLint, tetapi tidak di jsHint:
/*global jQuery */
// Example taken from jQuery 1.4.2 source
jQuery.extend({
/* ... */
isEmptyObject: function( obj ) {
for ( var name in obj ) {
return false;
}
return true;
}
/* ... */
});
Kodenya jelek, karena sepertinya JavaScript memiliki ruang lingkup blok, sedangkan belum. Lihat JavaScript: The Good Parts, hlm. 102, Lampiran A: Bagian Yang Mengerikan, Cakupan. Dengan kata lain, melihat kode tanpa mengetahui bahasa, kami berharap name
tidak terlihat di luar loop, sementara itu akan tetap terlihat.
Sedangkan untuk Google Closure Linter, saya percaya itu ada di tengah-tengah antara jsLint dan jsHint, tetapi saya tidak memiliki cukup informasi untuk mendukungnya.
Kesimpulan
Saya akan menghindari jsHint: terlalu permisif, artinya tidak akan menemukan bug potensial yang akan terdeteksi oleh linter lainnya. Panduan gaya yang digunakan sulit ditemukan.
Di antara jsLint dan Google Closure Linter, pilihannya tidak jelas. Keduanya ditulis oleh para ahli, keduanya mengikuti panduan gaya yang ketat, dijelaskan dengan baik sudah diikuti oleh ribuan pengembang. Gunakan keduanya untuk beberapa waktu, lalu pilih yang lebih praktis untuk Anda.