Mobil programlama, web programlama, server-side programlama gibi birçok teknolojinin içinde kullandığımız popüler bir programlama dili olan Javascript’te, asenkron programlamayı bir akış içinde anlatmaya çalışacağım. Her bir kısa başlık bir sonraki konu için ön hazırlık niteliğinde olacak.
Şimdiden iyi okumalar dilerim.
Kısaca JavaScript
Öncelikle Javascript’i tanıyalım. ECMAScript(ES) standartlarını uygulayan genel amaçlı bir script dilidir. Tarayıcılar bu sciprtleri çalıştırmak için yine ECMAScript standartlarını uygulayan Javascript Engine’ler sağlar. Bunlardan en ünlüsü Google tarafından geliştirilen V8’dir.
Javascipt single thread çalışır ve iki tane Execution Context yapısı vardır. Birincisi kod çalışmaya başladığında oluşturulan Global Execution Context, diğeri her fonksiyon için, fonksiyonlar çağırıldığında oluşan Function Execution Context’tir. Her context iki tane aşamaya sahiptir. Ortamı hazırlama safhası(creation phase) ve çalıştırma safhası(execution phase). Peki Context’lerin çalışma safhalarında neler yapılır?
Global Execution Context Creation Phase: Global object oluşturulur. Değişkenler ve fonksiyonlar için hafıza yönetilir, web tarayıcılarında this objesi global objeye bağlanır. Tüm değişkenler için başlangıç değeri olan undefined atanır.
Global Execution Context Execution Phase: Kod satır satır çalıştırılır, değişkenlere değerleri atanır ve fonksiyon çağrılmaları yapılır.
Function Execution Context Creation Phase: Arguments objesi fonksiyonun tüm parametrelerine referans olarak oluşturulur. Tüm değişkenler için başlangıç değeri olan undefined atanır.
Function Execution Context Execution Phase: Değişkenlere değerleri atanır ve fonksiyon sonucu Global Context’e dönülür.
Call Stack
Fonksiyonların çağırımı Call Stack yapısı ile yapılır. İsminden anlaşılacağı üzere Call Stack bir yığındır ve LIFO mantığı ile çalışır. Fonksiyonlar iç içe değilse, stack içerisinde aynı anda tek fonksiyon bulunur.
Şekil 1’deki örnek kodda bulunan fonksiyonların Call Stack içerisindeki çalışma sırası Şekil 2’de gösterilmiştir. Kodun çıktısında, satırlarda sırasıyla 2, 1 ve 3 değerleri olacaktır.