JavaScript, 1995'te Brendan Eich tarafından 10 günde tasarlanmış, başlangıçta sadece tarayıcıdaki sayfaları "canlandırmak" için yazılmış bir betik dilidir. Bugün ise tarayıcıda, sunucuda (Node.js), masaüstünde (Electron) ve mobilde (React Native) çalışır.
Yorumlanan değil, JIT-derlenen bir dil
Modern motorlar (V8, SpiderMonkey, JavaScriptCore) kodu satır satır yorumlamaz. Just-In-Time (JIT) derleyici kullanırlar:
- Kaynak kod parse edilip AST (Abstract Syntax Tree) çıkarılır
- Bytecode'a dönüştürülür ve hemen çalıştırılır
- Sık çalışan ("hot") fonksiyonlar makine koduna optimize edilir
Sonuç: JavaScript hızlıdır ama dinamiktir. Tip dönüşümleri ve geç bağlanma (late binding) bedeli vardır.
Tek thread + Event Loop
JavaScript tek bir thread'de çalışır. Ama "non-blocking"tir. Bunu mümkün kılan şey event loop'tur:
- Call Stack: çalışan fonksiyonlar yığını
- Web APIs / libuv: zaman aşımları, ağ istekleri, dosya I/O
- Task Queue / Microtask Queue: tamamlanan asenkron işlerin geri çağrımları
- Event Loop: stack boşsa kuyruktan iş alıp stack'e koyar
console.log("1");
setTimeout(() => console.log("2"), 0);
Promise.resolve().then(() => console.log("3"));
console.log("4");
// Çıktı: 1, 4, 3, 2
// Microtask (Promise) makrotask'tan (setTimeout) önce çalışır"Tek thread" demek "yavaş" demek değildir. Doğru kullanılırsa Node.js binlerce eşzamanlı bağlantıyı tek bir thread'de sorunsuz yönetebilir.
ECMAScript ve sürümler
JavaScript, ECMAScript standardının uygulamasıdır. Modern dönüm noktaları:
- ES5 (2009): strict mode, JSON, Array metotları
- ES6 / ES2015:
let,const, arrow function, class, Promise, modüller - ES2017+: her yıl yeni özellikler (async/await, optional chaining, vs.)
Bu eğitim ES2015+ modern JavaScript'i öğretir. Eski var'a sadece
karşılaştırma için değineceğiz.