Harmen cevabı oldukça iyidir, ama bana bu CoffeeScript derleyici ve neden yapılır nerede konuda ayrıntıya edelim.
(function() {
...
}).call(this);
Neden olmalarıdır: coffee -c foo.coffee
ile bir şeyler derlerken
, her zaman bu gibi görünen bir foo.js
alacak? Eh, sen foo.coffee
içinde
x = 'stringy string'
gibi bir atama koymak varsayalım. o gördüğünde, derleyici sorar: x
zaten bu kapsamda, ya bir dış kapsamda var mıdır? Değilse, JavaScript çıkışında o kapsamda üst kısmında bir var x
deklarasyon koyar.
Şimdi, bar.coffee
içinde
x = 42
yazma hem derlemek ve dağıtım için bar.js
ile foo.js
bağlamak herhalde.Sen
(function() {
var x;
x = 'stringy string';
...
}).call(this);
(function() {
var x;
x = 42;
...
}).call(this);
Yani
foo.coffee
içinde
x
ve
bar.coffee
yılında
x
birbirinden tamamen izole olan alırsınız. Bu, CoffeeScript'in önemli bir parçasıdır:
Değişkenler, dışa aktarılmadıkça (paylaşılan bir globale eklenerek veya Node.js'de
exports
) hiçbir zaman bir .coffee dosyasından diğerine sızmaz.
-b
("bare") bayrağını coffee
'a göre geçersiz kılabilirsiniz, ancak bu yalnızca çok özel durumlarda kullanılmalıdır. Yukarıdaki örnekle kullandıysanız, elde edeceğiniz çıktı
Bu çok ciddi sonuçlara yol açabilir. Bunu kendiniz test etmek için foo.coffee
'a setTimeout (-> alert x), 1
eklemeyi deneyin. İki JS dosyasını kendiniz birleştirmeniz gerekmediğine dikkat edin; bunları bir sayfaya eklemek için iki ayrı <script>
etiketi kullanırsanız, bunlar hala tek bir dosya olarak çalışır.
Farklı modüllerin kapsamlarını izole ederek, CoffeeScript derleyici, projenizdeki farklı dosyaların aynı yerel değişken adlarını kullanıp kullanamayacağını endişelendirmenin baş ağrısından kurtarır. Bu, JavaScript dünyasında yaygın bir uygulamadır (bkz. Örneğin, jQuery source, ya da hemen hemen herhangi bir jQuery eklentisi) —CoffeeScript sizin için sadece bununla ilgilenir.
Yazılı kahve metnini değil, oluşturulan javascript'i incelediğinizi unutmayın. – Dykam