$
Değişkenlerde kullanımda yanlış bir şey yoktur . Ben her değişken üzerinde bilerek yapmazdım, ama hala geçerli bir sözdizimi. jQuery, $
değişken adı olarak kullanılan örneklerden biridir . Bu nedenle "Chrome geliştirme araçları her zaman bunun bir Javascript hatası olduğunu görmez" , çünkü ilk etapta hata yoktur.
Aşağıdaki gibi kod yazmaktan korkuyorsanız:
var demo = function demo() {
var a = 123;
...
$a = 456; // A new variable is created in global scope.
}
jsLint , jsHint veya Google Closure Linter gibi bir stil denetleyicisi kullanmanız gerekir . Bunlardan hangisi? Seçim yapmak size kalmış. Bu konuda size yardımcı olması için birkaç not:
stil
Google Closure Linter , akıllıca yapıldığı bilinen Google JavaScript Stil Kılavuzu'nu takip ediyor. JavaScript veya diğer altı dilden herhangi biri için iyi bilinen bir stil kullanmak iyi bir fikirdir: kodunuzu paylaştığınızda veya yeni bir geliştirici kiraladığınızda, bu stile zaten aşina olma ihtimali vardır.
Birçok geliştirici de Douglas Crockford stiline aşinadır. Bu stil JavaScript'te ayrıntılı olarak açıklanmaktadır : JavaScript ile çalışan herkes tarafından satın alınmaya değer bir kitap olan İyi Parçalar .
JsHint'e gelince, hangi sözleşmelerin kullanıldığını gerçekten bulamıyorum ve web sitesinin kendisi bu konu hakkında konuşmaktan kaçınıyor gibi görünüyor. Belki bir şeyi özledim.
IDE'lerin desteği
Hem jsLint hem de jsHint , PhpStorm tarafından desteklenir . Bu da dava Google Kapatma Linter arasında.
çevre
Google Closure Linter, bir dizi araçtan biridir . Zaten Google Closure Derleyici veya Google Closure Kütüphanesi'ni kullanıyorsanız , diğer araçların üstünde Closure Linter'ı tercih etmeniz tercih edilir.
katılık
jsLint'in katı olduğu bilinmektedir. jsHint daha hoşgörülüdür, bu her zaman iyi bir şey değildir. Örneğin, jsHint için jsLint'in çatallanmasının nedenlerinden biri, jsLint'de hata üretecek, ancak jsHint'te hata üretecek kötü kod gösteren bir makalede açıklanmıştır :
/*global jQuery */
// Example taken from jQuery 1.4.2 source
jQuery.extend({
/* ... */
isEmptyObject: function( obj ) {
for ( var name in obj ) {
return false;
}
return true;
}
/* ... */
});
Kod kötü, çünkü JavaScript'in blok kapsamı yok gibi görünüyor, ancak değil. Bkz. JavaScript: İyi Parçalar, s. 102, Ek A: Korkunç Parçalar, Kapsam. Başka bir deyişle, dili bilmeden koda baktığımızda, name
görünür kalırken döngü dışında görünmemesini bekliyoruz.
Google Closure Linter'a gelince, jsLint ve jsHint arasında ortada bir yerde olduğuna inanıyorum, ancak bunu destekleyecek yeterli bilgim yok.
Sonuç
Ben jsHint önlemek: çok izin verici, yani diğer linters tespit potansiyel hataları bulamazsınız. Kullanılan stil rehberini bulmak zordur.
JsLint ve Google Closure Linter arasında seçim belli değil. Her ikisi de uzmanlar tarafından yazılmıştır, her ikisi de binlerce geliştirici tarafından takip edilen sıkı, iyi tanımlanmış stil kılavuzunu takip eder. Her ikisini de bir süre kullanın, sonra sizin için daha pratik olanı seçin.