ECMAScript kapanış

ECMAScript en bir yanlış anlamaya yol açan en önemli noktalarından biri, kapanış (closure) desteklemesidir.

Kapanış, kelime göstergesi içerir ve hesaplanmayan değişkenlerin fonksiyon, yani fonksiyonun dışında tanımlanan değişkenleri kullanabilir demektir.

Basit kapanış örneği

ECMAScript'te genel değişkenlerin kullanımı basit bir kapanış örneğidir. Aşağıdaki bu kod parçasını düşünün:

var sMessage = "hello world";
function sayHelloWorld() {
  alert(sMessage);
}
sayHelloWorld();

Yukarıdaki bu kod parçasında, sayHelloWorld() fonksiyonu için değişken sMessage'nın değeri hesaplanmadı. Bu fonksiyon, sMessage'nın değerini daha sonra kullanmak için yakaladı, yani, derleyici, fonksiyonun çağrıldığında sMessage'nın değerini kontrol etmesi gerektiğini biliyor. sMessage, fonksiyon sayHelloWorld() çağrıldığında (son satır) değerlendirilecek ve "hello world" mesajını gösterecektir.

Karmaşık kapanış örneği

Bir fonksiyon içinde bir diğerini tanımlamak kapanışları daha karmaşık hale getirir. Örneğin:

var iBaseNum = 10;
function addNum(iNum1, iNum2) {
  function doAdd() {
    return iNum1 + iNum2 + iBaseNum;
  }
  return doAdd();
}

Burada, addNum() fonksiyonu doAdd() (kapanış) içerir. İç fonksiyon bir kapanış çünkü dış fonksiyonun parametreleri iNum1 ve iNum2 ve genel değişkeni iBaseNum değerlerini alır. addNum() son adımı doAdd() çağrısını içerir, iki parametreyi ve genel değişkeni toplar ve onların toplamını döndürür.

Burada önemli bir kavram, doAdd() fonksiyonu aslında parametre almez, kullandığı değerleri çalışma ortamından alır.

Görülebilir ki, kapanışlar ECMAScript'te çok güçlü ve çok kullanılan bir parçasıdır ve karmaşık hesaplamalar için kullanılabilir.

İpucu:Herhangi bir üst düzey fonksiyon gibi, kapanışları dikkatli kullanmalısınız, çünkü它们可能会变得非常复杂。