Hemen adlandırılan adsız bir JavaScript işlevi için kullanılan terim nedir?


29

Ekibim için bir JavaScript stil rehberi yazıyorum, böylece belgelerimizi daha kolay organize edebilir ve katkıda bulunabiliriz. Ama sorumun uygulandığı küçük bir çarpma noktasına geldim ...

Hemen adı verilen isimsiz bir JavaScript işlevini çağırmam gerekiyor. Basitçe "isimsiz bir işlev" diyebileceğimi biliyorum, ama derhal çağrıldığını vurgulamak istiyorum.

İşte bir örnek:

var MyVariable = (function(data){
  return "another value"
})("some value"); 

console.log(MyVariable);
// "another value"

1
Bu yapıyı (yanlış) "kendi kendine arama işlevi"
AakashM

Yanıtlar:


39

Javascript dünyasında bunun için zaten bir terimleri var. Hemen Çağrılan İşlev İfadeleri (IIFE) olarak adlandırılırlar .

Ne olduğunu

IIFE işlevlerine bir ad verilmez. Bunun yerine, tercüman onların karşısına geldiğinde bir kez çalıştırılır:

var area = function() {
    var width = 3;
    var height = 2;
    return width * height;
}();

Nihai parantez kod bloğunun kapatma küme ayracı hemen sonra işlev ifadesini aramak için tercümana söyle.

Bir işlev bildirimi yazarsanız , tercümana, işlevi hemen çağrılabilecek bir ifade olarak değerlendirmesini söylemek için gruplandırma işleci veya işlevi çevreleyen parantez eklemelisiniz.

var area;
(function() {
    var width = 3;
    var height = 2;
    area = width * height;
}());


Ne zaman kullanılırlar?

IIFE'ler, tekrar tekrar çağrılmak yerine, bir görevde yalnızca bir kez çalışması gereken kod için kullanılır.

  1. Bir fonksiyon çağrıldığında argüman olarak (değerleri hesaplamak, vb.)
  2. Bir özelliğin değerini bir nesneye atamak için.
  3. Olay işleyicileri ve dinleyiciler.
  4. Aynı değişken adlarını kullanabilecek iki komut dosyası arasındaki çakışmaları önlemek için. Değişken adlarının aynı olup olmadığından emin olamadığınız başka bir komut dosyasında kod bırakmak için sarmalayıcılar olarak kullanılabilirler.

Bir nitpick: Kullanırken örneğinizde var area = ..., işlev üzerinde "sarma" parantezine ihtiyacınız yoktur, çünkü bu, işlevinin sağ tarafında olması nedeniyle zaten bir işlev ifadesidir =. Kaydırma parantezleri, yalnızca işlev bir işlev bildirimi olarak yazıldığında (yani satır olmadan var area = ...) gereklidir .
Eric King,

@EricKing doğru yaptım mı?
Lawrence Aiello,

Bu 'ekspres fonksiyonlar'ı daha rahat bir şekilde söyleyebilmek güzel olabilirdi
süzgeç

@LawrenceAiello Ne demek istediğimi göstermek için bir düzenleme ekledim. Umarım hala sizin için çalışır.
Eric King,

İlgili bir soru olarak, sorunun gösterildiği gibi IIFE'ye bir argüman iletmesi için herhangi bir sebep var mı? Bunları yalnızca gösterdiğiniz gibi görmüştüm - herhangi bir argüman olmadan (herhangi bir argüman yerel bir değişken olabileceğinden).
Kat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.