IIFE’den blocklara

ES5’te, tmp adında bir değişkenin kapsamını bir bloğa sınırlamak istiyorsanız, IIFE (Immediately-Invoked Function Expression) adlı bir pattern kullanmanız gerekirdi:

(function () {  // IIFE açılışı
  var tmp = ···;
  ···
}());  // IIFE kapanışı

console.log(tmp); // ReferenceError

ECMAScript 6’da ise sadece bir block ve let (veya const) kullanabilirsiniz.

{  // block açılışı
  let tmp = ···;
  ···
}  // block kapanışı

console.log(tmp); // ReferenceError

Önceki konuda bahsettiğimiz gibi var ile oluşturulan değişkenler fonksiyon scoped olduğundan dolayı fonksiyon dışında tanınmaz, sadece fonksiyon içerisinde kullanılırdı. ES6 ile birlikte gelen let ve const değişkenleri ise block scopedtur, haliyle fonksiyon dışında da bu değişkenleri kullanabilirsiniz.

Fakat bu değişkenlere bir sınır belirlemek istiyorsak blocklardan yararlanabiliriz. Üstteki kod örneğinde görüldüğü gibi let (yada const) ile oluşturulmuş bir değişken olmasına rağmen, block dışarısında console.log(tmp); yapıldığında tmp değişkeninin tanımlı olmadığının uyarısını verecektir.

Sıradaki Konu: Arrow fonksiyonları