JavaScript, bugun web'in uzerinde kosdugu programlama dilidir. Tarayicidaki bir butonun tiklamaya cevap vermesinden, arka planda calisan bir sunucu servisine kadar cok genis bir alanda kullanilir. Bu yazida dilin ne oldugunu, nasil ortaya ciktigini, nasil calistigini ve nerede ise yaradigini tarafsiz ve teknik bir cerceveyle ele aliyoruz.
Ilgili rehberler: Genel resim icin programlama dilleri rehberi ana yazisina goz atabilir, sunucu tarafi ile karsilastirmak icin Node.js nedir? yazisini okuyabilirsin.
JavaScript nedir?
JavaScript, yuksek seviyeli, dinamik tipli, cok paradigmali bir programlama dilidir. "Yuksek seviyeli" olmasi, bellek yonetimi gibi dusuk seviyeli ayrintilarla ugrasmadan kod yazabilmen anlamina gelir. "Dinamik tipli" olmasi, bir degiskenin turunu calisma aninda belirlemesi demektir; ayni degisken once bir sayi, sonra bir metin tutabilir.
Dil hem nesne yonelimli (prototip tabanli), hem fonksiyonel, hem de olay guddumlu (event-driven) yaklasimlari destekler. Baslangicta yalnizca tarayicida calisan bir betik diliyken, bugun sunucularda, masaustu uygulamalarinda, mobil uygulamalarda ve gomulu sistemlerde de yer alir.
Kisa bir tarihce
JavaScript, 1995 yilinda Netscape'te Brendan Eich tarafindan gelistirildi. Dil cok kisa bir surede tasarlandi ve once Mocha, ardindan LiveScript, son olarak JavaScript adini aldi. Amac, o donemde populerlesen web sayfalarina etkilesim katmakti.
Diller arasi uyumu saglamak icin dil, ECMA International tarafindan standartlastirildi. Bu standardin adi ECMAScript, resmi belgesi ise ECMA-262'dir. "JavaScript" gunluk dilde bu standardin en yaygin uygulamasini anlatir.
Ilk yillarda JavaScript, cogunlukla kucuk suslemeler ve form dogrulamalari icin kullaniliyordu. Tarayicilar arasindaki farkliliklar gelistiricilerin isini zorlastiriyordu. 2000'li yillarin ortasinda sayfayi yeniden yuklemeden sunucuyla veri alisverisi yapan yaklasimin (AJAX olarak anilir) yayginlasmasi, dilin ciddi uygulamalar icin de kullanilabilecegini gosterdi. Bu donem, zengin web uygulamalarinin onunu acti.
JavaScript nasil calisir?
Kaynak kodu bir JavaScript motoru tarafindan yorumlanir ve calistirilir. Modern motorlar, kodu daha hizli isletmek icin JIT (Just-In-Time) derleme teknikleri kullanir. Farkli tarayicilar farkli motorlar barindirir:
| Motor | Kullanildigi yer |
|---|---|
| V8 | Google Chrome, Microsoft Edge, Node.js |
| SpiderMonkey | Mozilla Firefox |
| JavaScriptCore | Safari (WebKit) |
JavaScript tek is parcacikli (single-threaded) bir modele dayanir; yani ayni anda tek bir kod parcasini yurutur. Uzun suren islerin arayuzu dondurmasini onlemek icin olay dongusu (event loop) ve asenkron mekanizmalar kullanir. Bu tasarim, agir I/O islerinde bekleme yapmadan calismaya olanak tanir.
Isleyisin merkezinde bir cagri yigini (call stack), bir gorev kuyrugu ve olay dongusu bulunur. Bir islem tamamlandiginda ilgili geri cagrim kuyruga alinir; yigin bosaldiginda olay dongusu bekleyen isleri sirayla yigina tasir. Bu nedenle JavaScript'te "paralel" degil, "es zamanli" (concurrent) bir yurutme modelinden soz edilir. Yogun hesaplama gerektiren isler icin tarayici tarafinda Web Worker, Node.js tarafinda ise ayri is parcacigi mekanizmalari devreye alinabilir.
Temel dil ozellikleri
- Dinamik ve zayif tipleme: turler calisma aninda belirlenir ve gerektiginde donusturulur.
- Prototip tabanli nesne modeli: nesneler, siniflar yerine dogrudan diger nesnelerden ozellik miras alabilir.
- Birinci sinif fonksiyonlar: fonksiyonlar degisken gibi atanabilir, parametre olarak gecirilebilir ve dondurulebilir.
- Kapsam (closure) destegi: bir fonksiyon, tanimlandigi kapsamdaki degiskenlere sonradan da erisebilir.
- Otomatik cop toplama (garbage collection): kullanilmayan bellek otomatik olarak geri alinir.
Veri turleri ve degiskenler
JavaScript'te degiskenler let, const ve daha eski var anahtar sozcukleriyle tanimlanir. Temel (ilkel) turler arasinda sayi, metin, mantiksal deger, null, undefined, symbol ve buyuk tam sayilar icin bigint bulunur. Bunlarin disinda kalan her sey nesne olarak degerlendirilir.
// Degisken tanimlama
const ad = 'Ada'; // metin (string)
let yas = 30; // sayi (number)
let aktif = true; // mantiksal (boolean)
// Dinamik tipleme
let deger = 42;
deger = 'artik metin'; // ayni degisken, farkli tur
// Nesne ve dizi
const kullanici = { ad: 'Ada', yas: 30 };
const sayilar = [1, 2, 3, 4];
// Birinci sinif fonksiyon
const kare = (x) => x * x;
console.log(kare(5)); // 25DOM ve tarayici ortami
Tarayicida JavaScript'in en gorunur isi, sayfayla etkilesimdir. HTML belgesi bellekte DOM (Document Object Model) adi verilen bir agac yapisina donusur. JavaScript bu agaci okuyabilir, degistirebilir ve olaylara (tiklama, klavye, fare hareketi) tepki verebilir.
// Bir butona tiklama olayi baglama
const btn = document.querySelector('#kaydet');
btn.addEventListener('click', () => {
const kutu = document.querySelector('#mesaj');
kutu.textContent = 'Kaydedildi!';
});Tarayici ayrica fetch, zamanlayicilar, yerel depolama ve konum gibi bircok API'yi JavaScript'e sunar. Bu API'ler dilin bir parcasi degildir; tarayicinin sagladigi ek yeteneklerdir. Bu ayrim onemlidir, cunku ayni JavaScript kodu farkli ortamlarda calisirken farkli API kumelerine erisir: tarayicida DOM ve pencere nesnesi bulunurken, Node.js tarafinda dosya sistemi ve ag soketleri gibi sunucuya ozgu yetenekler devrededir.
Asenkron programlama
Ag istekleri, dosya okuma veya zaman asimi gibi isler zaman alir. JavaScript bu islerde beklemek yerine, is bitince cagrilacak bir mekanizma tanimlar. Bu amacla geri cagrimlar (callback), Promise nesneleri ve async/await soz dizimi kullanilir.
// Promise ve async/await
async function veriGetir() {
try {
const yanit = await fetch('/api/haberler');
const veri = await yanit.json();
return veri;
} catch (hata) {
console.error('Istek basarisiz:', hata);
}
}
veriGetir().then((veri) => console.log(veri));Node.js ve sunucu tarafi
Uzun yillar boyunca JavaScript yalnizca tarayicida calisti. 2009'da tanitilan Node.js, V8 motorunu tarayicidan bagimsiz calistirarak dili sunucuya tasidi. Boylece ayni dille hem istemci hem sunucu tarafi yazilabilir hale geldi.
Node.js, olaya dayali ve engellemeyen (non-blocking) I/O modeli sayesinde cok sayida es zamanli baglantiyi verimli sekilde ele almak uzere tasarlanmistir. Bu ozellik, onu API sunuculari ve gercek zamanli servisler icin yaygin bir secim yapar. Daha yeni Deno ve Bun calisma ortamlari da benzer amaclara hizmet eder; ozellikle guvenlik varsayilanlari ve gelistirici deneyimi gibi alanlarda farkli tercihler sunarlar.
Sunucu tarafinda JavaScript kullanmanin pratik bir avantaji, ekipteki bilgi birikiminin ortak olmasidir. Arayuzu yazan gelistirici, ayni dille yazilmis bir API katmanini da rahatca okuyabilir ve katkida bulunabilir. Bu durum, ozellikle kucuk ve orta olcekli ekiplerde gelistirme hizini olumlu etkiler.
Ekosistem: framework'ler ve araclar
JavaScript'in gucu, buyuk olcude etrafindaki ekosistemden gelir. Paket yoneticisi npm araciligiyla cok genis bir kitaplik havuzuna erisilir. Arayuz gelistirmede React, Vue, Angular ve Svelte gibi kutuphane ve cerceveler one cikar.
- Arayuz (frontend): React, Vue, Angular, Svelte
- Sunucu (backend): Express, NestJS, Fastify gibi Node.js cerceveleri
- Derleme ve paketleme: Vite, webpack, esbuild
- Tip guvenligi: TypeScript, JavaScript'in ustune statik tipler ekleyen bir ust kumedir
Ekosistemin bu kadar genis olmasinin iki yuzu vardir. Bir yandan neredeyse her ihtiyac icin hazir bir cozum bulunur; ote yandan bagimliliklarin guncel ve guvenli tutulmasi ayri bir dikkat gerektirir. Uretim projelerinde kullandigin paketleri duzenli guncellemek ve gereksiz bagimliliklardan kacinmak, bakim yukunu dusuren pratiklerdendir. Bir baska dinamik dille kiyaslamak icin PHP nedir? yazisi da faydali bir referans olabilir.
JavaScript'i diger dillerle karsilastirmak
Asagidaki tablo, JavaScript'i sik kullanilan bazi dillerle kabaca karsilastirir. Amac bir dili digerinden ustun gostermek degil, kullanim alanlarindaki farklari netlestirmektir.
| Ozellik | JavaScript | Python | Java |
|---|---|---|---|
| Tip sistemi | Dinamik, zayif | Dinamik, guclu | Statik, guclu |
| Ana calisma yeri | Tarayici ve Node.js | Sunucu, veri bilimi | JVM (kurumsal, Android) |
| Es zamanlilik | Olay dongusu, async | Thread + async | Cok is parcacikli |
| Tipik kullanim | Web arayuzu, API | Otomasyon, ML, backend | Buyuk kurumsal sistemler |
Karsilastirma icin Java nedir? yazisina da bakabilirsin; statik tipli ve derlenen bir dilin JavaScript'ten nasil ayristigini gormek faydali olur.
ECMAScript standardi ve surumler
JavaScript'in cekirdek soz dizimi ve davranisi ECMAScript standardiyla belirlenir. 2015 yilinda yayimlanan buyuk surum (yaygin adiyla ES6 veya ES2015) dile let/const, ok fonksiyonlari, siniflar, modul yapisi ve Promise gibi onemli yenilikler getirdi. Bu surumden sonra standart, yilda bir kez guncellenen bir ritme gecti.
JavaScript nerede kullanilir?
| Alan | Ornek kullanim |
|---|---|
| Web arayuzu | Etkilesimli sayfalar, tek sayfa uygulamalar (SPA) |
| Sunucu tarafi | REST/GraphQL API'leri, gercek zamanli servisler |
| Masaustu | Electron tabanli uygulamalar |
| Mobil | React Native gibi cerceveler |
| Otomasyon | Yapi betikleri, test araclari |
Bu genislik, JavaScript'i ogrenmeye deger kilan en onemli etkenlerden biridir: tek bir dille cok farkli katmanlarda uretim yapabilirsin. Web tabanli bir haber sitesinin hem arayuz etkilesimleri hem de bazi sunucu servisleri ayni dille yazilabilir.
JavaScript neden bu kadar yaygin?
Bir dilin populerligi yalnizca teknik ozelliklerine bagli degildir; erisim kolayligi, ekosistemin buyuklugu ve toplulugun genisligi de belirleyicidir. JavaScript bu acilardan avantajli bir konumdadir:
- Her tarayicida hazir gelir; ogrenmeye baslamak icin ek kurulum gerekmez.
- Ayni dille hem arayuz hem sunucu yazilabilir, bu da ekiplerde is bolumunu kolaylastirir.
- npm uzerinde cok genis bir hazir kutuphane havuzu bulunur.
- Genis bir topluluk, bol miktarda ogrenme kaynagi ve ornek uretir.
- TypeScript gibi ust kumeler, buyuk projelerde daha guvenli gelistirme saglar.
Bu etkenler bir araya geldiginde JavaScript, hem yeni baslayanlar hem de kurumsal ekipler icin dusuk giris esikli ama olceklenebilir bir secenek haline gelir.
Sik sorulan sorular
JavaScript ile TypeScript arasindaki fark nedir?
TypeScript, JavaScript'in ustune statik tip sistemi ekleyen bir ust kumedir. Gecerli her JavaScript kodu ayni zamanda gecerli TypeScript'tir. TypeScript kodu, tarayicida veya Node.js'te calismadan once JavaScript'e cevrilir (derlenir).
JavaScript ogrenmek zor mu?
Temel soz dizimine baslamak gorece kolaydir; degisken, fonksiyon ve dongu gibi kavramlar hizli ogrenilir. Asenkron programlama, kapsam (closure) ve prototip modeli gibi konular ise biraz daha pratik gerektirir. Adim adim ilerlemek ve kucuk projeler yapmak en saglikli yoldur.
JavaScript sadece web icin mi kullanilir?
Hayir. Web arayuzu en yaygin kullanim alani olsa da, Node.js ile sunucu servisleri, Electron ile masaustu uygulamalari, React Native ile mobil uygulamalar ve cesitli otomasyon betikleri de JavaScript ile yazilabilir.
Ozet: JavaScript, web'in etkilesim katmanini dogurmus, zamanla sunucudan masaustune kadar genis bir alana yayilmis dinamik bir dildir. Prototip tabanli nesne modeli, birinci sinif fonksiyonlar ve olay dongusu tabanli asenkron yapisi onu ozgun kilar. Saglam bir temel kurmak, sonrasinda TypeScript ve modern cerceveleri ogrenmeyi kolaylastirir. Diger dillerle nasil bir tabloya oturdugunu gormek icin programlama dilleri rehberi yazisini incelemeni oneririz.