JavaScript’te “Execution Context” Nedir, Nasıl Çalışır?
Bu yazımızda, JavaScript motorunun çalışma prensiplerinin anlaşılması adına temel bir kavram olan “execution context” nedir, nasıl çalışır?” gibi çeşitli sorulara cevap vererek detaylı bir yazı hazırladık.
“Execution Context” Nedir?
JavaScript’te oldukça önemli bir kavram olan “execution context”, kodumuzun hangi ortamda çalıştığını, hangi değişkenlerin, fonksiyonların ve diğer kod parçalarının o anda erişilebilir olduğunu belirleyen mekanızmadır. Dolayısıyla bu mekanızmanın nasıl oluşturulduğunu ve nasıl çalıştığını anlamak, JavaScript’teki birçok karmaşık konseptin altında yatan sebebi de kavramamıza yardımcı olur.
Kelime anlamı olarak “Execution” yürütme veya çalıştırma, “Context” ise bağlam ya da durum demektir. Bu iki kelime birleştiğinde, kodun nerede ve hangi koşullar altında çalıştırıldığına dair bilgiyi ifade eder.
Yani “execution context” dediğimiz şey aslında JavaScript’te bir kod parçasının çalışma ortamıdır. Bu ortam, o kod parçasının erişebileceği değişkenleri, fonksiyonları ve diğer kod birimlerini belirler. Basitçe, hangi değişkenlerin ve fonksiyonların mevcut olduğunu, hangi fonksiyonların hangi sırayla çalıştırılacağını ve kodun nerede çalıştığını belirten bir çerçevedir. Haliyle, kodun hangi sırayla ve hangi değişkenlere erişerek yürütüleceğini anlamak için hayati öneme sahiptir.
Olayı somutlaştırmak adına “execution context” kavramını okul sınıfı ortamına benzetebiliriz. Bir sınıfta ders başladığında, o sınıfta bulunan öğrenciler (değişkenler), öğretmenin işlediği konular (fonksiyonlar) ve o ders için belirlenen müfredat (kapsam/scope) bellidir. Bu sınıfta aynı zamanda her öğrencinin nerede oturduğu ve kim olduğunu anlatan numarası gibi bilgiler (this anahtar kelimesi) de bulunmaktadır.
Dersin sona ermesiyle bir sonraki ders için farklı bir öğretmen gelebilir, farklı öğrenciler sınıfa katılabilir ya da farklı konular işlenebilir. Ancak her ders kendi içinde bağımsızdır ve sadece o ders için belirlenen bilgilere erişilir.
İşte JavaScript’te de “execution context” kendi içinde izole edilmiştir ve sadece o context için tanımlı bilgilere erişebilir.
JavaScript’te execution context, “Global execution context” ve “Function execution context” olmak üzere ikiye ayrılır. Bu iki yapı da kendi içinde “creation” ve “execution” olmak üzere iki aşamaya sahiptir.
- Global Execution Context (GEC): JavaScript dosyası çalıştırıldığında, ilk olarak Global Execution Context oluşturulur. Bu, dosyanın en üst seviyesindeki kodların çalıştırılma bağlamıdır.
- Creation Phase (Oluşturma Aşaması):
- Değişken nesnesi (Variable Object) oluşturulur.
- Kapsam zinciri (Scope Chain) oluşturulur.
this
anahtar kelimesi başlatılır.- Global nesne (
window
tarayıcıda,global
Node.js’te) oluşturulur vethis
ona atanır.
- Execution Phase (Yürütme Aşaması):
- Koddaki ifadeler satır satır çalıştırılır.
- Değişkenler ve fonksiyonlar bellekte ayrılan yere atanır (call stack). Fonksiyonlar tamamen belleğe yüklenir, ama değişkenler
undefined
olarak başlatılır. Bu, hoisting olarak adlandırılan davranışın nedenidir.
- Creation Phase (Oluşturma Aşaması):
- Function Execution Context (FEC): Bir fonksiyon çağrıldığında (invoked), bu fonksiyon için yeni bir Execution Context oluşturulur.
- Creation Phase (Oluşturma Aşaması):
- Değişken nesnesi (Variable Object) oluşturulur.
- Kapsam zinciri (Scope Chain) oluşturulur.
this
anahtar kelimesi başlatılır.- Aktarılan argümanlar için yer oluşturulur.
- Aktif fonksiyonun erişebileceği değişkenler ve fonksiyonlar için yer ayrılır.
- Execution Phase (Yürütme Aşaması):
- Koddaki ifadeler satır satır çalıştırılır.
- Değişkenler ve fonksiyonlar bellekte ayrılan yere atanır (call stack). Fonksiyonlar tamamen belleğe yüklenir, ama değişkenler
undefined
olarak başlatılır. Bu, hoisting olarak adlandırılan davranışın nedenidir.
- Creation Phase (Oluşturma Aşaması):
Özetle “execution context”, JavaScript’te kodun düzgün bir şekilde çalışmasını sağlamak için hayati öneme sahiptir ve her fonksiyon çağrısı ile birlikte oluşturulur. Bu nedenle, JavaScript’in temel yapı taşlarından biri olarak kabul edilir.