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

  • Bryan Smith

    Bryan Smith

    12 Mart 2006
  • Edge-CGI 3D Tutorials and more!

    Edge-CGI 3D

    11 HAZİRAN 2013
  • Crossover

    Crossover

    18 HAZİRAN 2007