JavaScript

JavaScript’te “IIFE” Nedir?

Malumunuz JavaScript, günümüzün en popüler programlama dillerinden biri olup web uygulamaları geliştirmede oldukça sık kullanılmaktadır. JavaScript, diğer dillerde kullanılan özelliklere sahip olduğu gibi “IIFE” gibi nevi şahsına münhasır özellikleri de barındırmaktadır. “Peki bu IIFE denen şey de nedir?” diye soracak olursanız, cevap olarak; Immediately Invoked Function Expression olarak adlandırılan bir fonksiyon tanımlama tekniğidir diyebiliriz ve adlandırmasını da kelimelerin baş harflerinden almışıtır.

Bu yazımızda, IIFE’nin ne olduğunu, nasıl kullanıldığını ve neden önemli olduğunu daha detaylı bir şekilde ele alacağız.

“IIFE” Nedir?

Türkçe karşılığı olarak “Anında Çağrılan Fonksiyon İfadesi” veya “Anında Çağrılan Fonksiyon” şeklinde kullanabileceğimiz “Immediately Invoked Function Expression”, bir fonksiyonun tanımlanması ve hemen ardından çağrılmasıdır.

“Peki, IIFE ne işimize yarıyor, bizim için önemli mi?” diye soracak olursanız bu özellik için, kodun daha önceden bir kapsayıcıya ihtiyaç duymadan çalışmasını sağlar ve içindeki değişkenlerin ve fonksiyonların “global” ad alanıyla çakışmasını önler.

IIFE çağrısı için aşağıdaki iki yöntemden biri ile sağlanır:

Yukarıda gösterilen kod bloğu, fonksiyonun tanımlanmasını ve ardından hemen çağrılmasını içerir. Bu tarz fonksiyonlar çağrı operatörleri ( ) kullanır. Zaten fark ettiyseniz bu yapının, parantezler ( ) içine giydirilmiş anonim fonksiyonlar olduğu görülecektir.

IIFE’nin alametifarikası ise içinde tanımlanan değişkenlerin dış dünya tarafından erişilmesini engellemesidir. Haliyle global değişkenlerle bir çakışma yaşamadığından değişken bildirimlerini izole etmek için oldukça pratik bir kullanım sağlar. Böylece, değişken çakışması riski ortadan kalkar ve programın işleyişi daha öngörülebilir ve güvenli hale gelir.

❗ Argümanlar, IIFE’nin içindeki kodun kullanabileceği değerler sağlamak için kullanılabilir. Örneğin:

❗ IIFE’ler arrow fonksiyonlarıyla da kullanılabilir. Aşağıdaki örnek, “arrow” fonksiyonlarının “IIFE” içinde nasıl kullanılabileceğini göstermektedir:

❗ Her ne kadar IIFE’lere isim verilebilse de bu tür bir kullanım genellikle gereksizdir ve IIFE’nin ana amacı olan “kapsamı koruma” ve “örtülü kapsam” yaratma özelliklerinin çoğunu ortadan kaldırabilir. Bakınız:

❗ Birden fazla JavaScript dosyasını birleştirirken eğer önceki dosyanın son satırında noktalı virgül yoksa, sonraki dosyanın ilk satırıyla birleştirildiğinde sentaks hatası oluşabilir. Bu yüzden böylesi durumlarda noktalı virgül ; ile başlayan “IIFE” kullanımları vardır:

❗ ❗ JavaScript’te IIFE’ler scope ile alakalı olduğu için scope kavramını iyi bilmek hayati bir öneme sahiptir. Bunun nasıl bir öneme sahip olduğunu aşağıdaki örnek üzerinden inceleyebilirsiniz:

Yukarıdaki örneğimizde x, fonksiyonun kapsama alanında var anahtar kelimesi kullanılarak tanımlanmıştır. Ancak y değişkeni için var, let veya const anahtar kelimelerinden biri kullanılmamıştır, bu da onun otomatik olarak global kapsama atanmasına neden olmuştur.

Haliyle y‘nin global kapsama alanında tanımlanmış olur ve 200 yazdırılacaktır. Ancak x, IIFE içinde var anahtar kelimesi kullanılarak tanımlanmıştır ve yalnızca o fonksiyonun kapsama alanında mevcuttur. Bu yüzden x‘in değeri global kapsamda tanımlı değildir ve x is not defined hatası alınır.

Bu durumu anlamak, JavaScript’te değişken kapsama alanlarını (scope) ve var, let, const anahtar kelimelerinin nasıl çalıştığını anlamak için önemlidir. JavaScript’te var anahtar kelimesi, değişkenin tanımlandığı en yakın fonksiyon kapsamını oluştururken, let ve const anahtar kelimeleri blok kapsamı oluşturur ve değişkenin tanımlandığı blok içinde kalır.

Yukarıda da gösterdiğimiz nedenlerden ötürü IIFE’ler, kodun modülerleştirilmesi ve işlevselliklerin izole edilmesi için JavaScript uygulamalarında sıklıkla kullanılmaktadır. Örneğin, IIFE içinde tanımlanan bir değişken, sadece IIFE’nin içindeki kodda kullanılabilir ve global ad alanını kirletmezler. Bu nedenle, IIFE’ler, JavaScript projelerinde sıkça kullanılan bir tasarım deseni olarak karşımıza çıkar.

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu

😔 Reklam Engelleyicisi 😔

Sitenin varlığını sürdürebilmesi adına reklam engelleyicinizi (Adblocker) kapatmanızı rica ediyoruz 😔