SORU
7 EKİM 2010, PERŞEMBE


javascript: anonim işlev özyinelemeli?

Temel özyinelemeli bir fonksiyon var diyelim:

function recur(data) {
    data = data 1;
    var nothing = function() {
        recur(data);
    }
    nothing();
}

Nasıl anonim bir fonksiyon gibi varsa bunu yapabilir

(function(data){
    data = data 1;
    var nothing = function() {
        //Something here that calls the function?
    }
    nothing();
})();

İsterim bir ara işlev olarak adlandırılan bu işlev... gördüm komut bir yerde (hatırlamıyorum), o-ebilmek söylemek sen adını bir fonksiyonu olarak adlandırılan, ama ben hatırlayamıyorum herhangi bir bilgi şu an.

CEVAP
7 EKİM 2010, PERŞEMBE


Sanaolabilirişlev bir değer olarak işlev yaratıyorsun bize bir isim ver ve bir "işlev bildirimi" deyimi. Diğer bir deyişle:

(function foo() { foo(); })();

yığın-esen bir özyinelemeli işlevi. Şimdi, dedi, Javascript ve çeşitli uygulamaları ile bazı garip sorunlar var çünkü 9 ** genel olarak. (not- bu oldukça eski bir yorum var; sorunları Kangax blog yazısı anlatılan birçok/bazı/tüm modern tarayıcılarda sabit olabilir.)

Böyle bir ad verin, adı görünür işlevi (öyle olmak zorunda değil; bu weirdnesses biri) dışında değildir. "" Lisp. letrec gibi

"Modu ve genellikle bazı iyileştirmeler zor yapar çünkü kötü bir şey olarak kabul edilir. "katı içinde bırakılmış olan arguments.callee, Ayrıca bir beklediğinizden çok daha yavaş.

edit- Eğer istediğiniz için etkili bir "anonim" bir işlevi çağırmak kendisi yapabilir misin böyle bir şey (varsayıyorsun geçen işlevi, bir geri arama ya da bir şey gibi):

asyncThingWithCallback(params, (function() {
  function recursive() {
    if (timeToStop())
      return whatever();
    recursive(moreWork);
  }
  return recursive;
})());

Bu ne güzel, güvenli bir işlevi yok---kırık YANİ fonksiyon tanımlayınbeyannamesiaçıklamada, Genel ad kirletmez olan yerel bir işlevi oluşturma. Sarıcı (gerçekten) anonim sadece yerel işlev döndürür.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Anthony Le

    Anthony Le

    10 EKİM 2006
  • Art Food Kitty - Kelly Eddington

    Art Food Kit

    7 Kasım 2006
  • HER0R

    HER0R

    16 Aralık 2007