SORU
18 Kasım 2010, PERŞEMBE


CoffeeScript Ve Global Değişkenler

Üzerinde Coffeescript.org:

bawbag = (x, y) ->
    z = (x * y)

bawbag(5, 10) 

derlemek için:

var bawbag;
bawbag = function(x, y) {
  var z;
  return (z = (x * y));
};
bawbag(5, 10);

node.js altında kahve-komut dizisi ile derleme tamamladı:

(function() {
  var bawbag;
  bawbag = function(x, y) {
    var z;
    return (z = (x * y));
  };
  bawbag(5, 10);
}).call(this);

Docs ki:

Eğer kullanmak için diğer komut için üst düzey değişkenleri oluşturmak istiyorsanız ihracatı üzerinde pencere ya da özellikleri olarak Ekle nesne CommonJS. Varoluşsal operatörü (aşağıda anlatılmıştır), size yardımcı olacaktır. eğer hedeflediğiniz eğer onları eklemek için bir yer bulmak için güvenilir bir şekilde hem de CommonJS ve tarayıcı: = ihracat kök ? bu

O zaman nasıl CoffeeScript Genel Değişkenler tanımlamak. 'Pencere'? özellikleri olarak onları takmak nedir

CEVAP
18 Kasım 2010, PERŞEMBE


Kahve script otomatik olarak kahve-script tüm değişkenler için ekler var hiçbir ifade olduğundan, böylece her şeyi sızıntı derlenmiş JavaScript sürümü önlergenel ad.

Yani bir şey "" içine . sızıntı yapmak için yolu yok bu yana ^strong>genel adbir şeyleri bilerek kahve-script taraftan, özellikleri gibi genel değişkenler tanımlamak gerekirgenel nesne.

pencere özellikleri olarak ekleyebilirsiniz

Bu orada beri tarayıcı dava işleyen window.foo = 'baz';,, gibi bir şeyler yapmanız gerekiyor demektirgenel nesnebu window.

Node.js

İçinde Node.js yok window nesne yerine işte exports nesne alır iletilen sarıcı o sarar Node.js modülü (Bkz: https://github.com/ry/node/blob/master/src/node.js#L321 ), yani Node.js ne olur gerek exports.foo = 'baz';.

Şimdi bize bu belgeler teklif olarak devletler ne bir göz atalım:

...CommonJS ve tarayıcı hedefleme: = ihracat ? kök bu

Bu tabii ki kahve-senaryo, bu aslında derler ne içine bir göz atalım:

var root;
root = (typeof exports !== "undefined" && exports !== null) ? exports : this;

İlk exports JavaScript olmayan bir değişken referans için çalışıyor başka bir SyntaxError (typeof ile kullanıldığında hariç) doğuracak beri tanımlı olup olmadığını kontrol eder

Yani exports node.js (veya kötü yazılmış bir web Sitesi...) olan varsa, kök exports, 20* *aksi takdirde işaret eder. this nedir?

(function() {...}).call(this);

Kullanma .call bir işlevi olacak bağlama this iç işlevi ilk parametre geçti, tarayıcı this acaba şimdi window nesne, Node.js olurküresel bağlamdaayrıca global nesnesi olarak kullanılabilir.

Ama beri var olan require işlev Node.js yok gerek atamak bir şey global nesne Node.js yerine atamak için exports nesneyi alır sonra döndürülen require işlevi.

Kahve-Script

Tüm bu açıklamadan sonra, burada yapmanız gerekenler:

root = exports ? this
root.foo = -> 'Hello World'

Bu işlev genel ad foo ne olursa olsun, () ilan edilecektir.
Hepsi bu :)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Abbeydabby0277's channel

    Abbeydabby02

    9 ŞUBAT 2012
  • bashirsultani

    bashirsultan

    22 Mart 2010
  • Slave Boy Films - Fandom from a Galaxy Far Far Away

    Slave Boy Fi

    12 HAZİRAN 2009