← Kursa Dön
📄 Text · 30 min

JavaScript Nedir? Tarihçe ve Temel Kavramlar

Giriş — Neden JavaScript?

Bir web sitesini ziyaret ettiğinizde gördüğünüz her animasyon, tıkladığınızda açılan her menü, form gönderdiğinizde anında beliren her hata mesajı — bunların hepsinin arkasında JavaScript var. Bugün internet üzerindeki web sitelerinin %98'inden fazlası JavaScript kullanıyor. Bu sadece popülerlik değil; JavaScript, web'in üç temel yapı taşından biri.

Düşünün: HTML bir evin iskeletiyse, CSS o evin boyası ve dekorasyonuysa, JavaScript o evin elektrik tesisatı, akıllı ev sistemi ve kapılarıdır. Düğmeye basınca ışık yanar, sensör hareket algılayınca alarm çalar, termostat sıcaklığa göre ayarlanır. Kısacası JavaScript, web sayfalarına davranış kazandıran dildir.

Ama JavaScript'in hikayesi burada bitmiyor. Bir zamanlar sadece tarayıcılarda çalışan bu dil, bugün sunucularda, mobil uygulamalarda, masaüstü programlarında, hatta IoT cihazlarında bile çalışıyor. Bu derste JavaScript'in ne olduğunu, nereden geldiğini, nasıl bu kadar güçlendiğini ve neden öğrenmeniz gerektiğini derinlemesine keşfedeceğiz.


JavaScript'in Doğuş Hikayesi

10 Günde Doğan Dil

1995 yılı. İnternet henüz emekleme aşamasında. Web sayfaları tamamen statik — tıpkı bir dergi sayfası gibi. Bir form doldurup "Gönder" butonuna tıkladığınızda, sayfanın tamamı sunucuya gidiyor, sunucu kontrol edip "E-posta alanı boş" diye yeni bir sayfa geri gönderiyor. Bu süreç ağır, kullanıcı deneyimi berbat.

Netscape Navigator — o dönemin en popüler tarayıcısı — bu soruna bir çözüm arıyordu. Tarayıcıda çalışacak, basit ve hızlı öğrenilebilir bir programlama dili gerekiyordu. Bu görevi Brendan Eich'a verdiler. Ve Brendan Eich, sadece 10 günde JavaScript'in ilk sürümünü yazdı.

1995 — Brendan Eich, Mocha adıyla dili oluşturur (10 gün!)
1995 — Mocha → LiveScript olarak yeniden adlandırılır
1995 — Java'nın popülaritesinden faydalanmak için JavaScript adı verilir
1996 — Microsoft, JScript adıyla kendi versiyonunu çıkarır
1997 — Standartlaştırma başlar: ECMAScript 1 (ES1) yayınlanır

İsim Karmaşası: JavaScript ile Java'nın hiçbir ilişkisi yoktur. Bu isimlendirme tamamen pazarlama stratejisiydi. Java o dönem çok popülerdi ve Netscape, bu popülariteden faydalanmak istedi. Araba ile Karpuz arasındaki ilişki ne kadarsa, JavaScript ile Java arasındaki ilişki de o kadardır — sadece ismin bir kısmı benzer.

Tarayıcı Savaşları ve Kaos Dönemi

1990'ların sonlarında korkunç bir dönem başladı: Tarayıcı Savaşları. Netscape ve Microsoft (Internet Explorer) birbirleriyle rekabet ederken, her biri kendi JavaScript özelliklerini ekliyordu. Bir tarayıcıda çalışan kod, diğerinde çalışmıyordu. Web geliştiriciler çıldırıyordu.

Bu kaos, standartlaştırma ihtiyacını doğurdu. ECMA International adlı standart kuruluşu devreye girdi ve JavaScript'in standart versiyonunu belirlemeye başladı. İşte bu standart spesifikasyonun adı: ECMAScript.


ECMAScript: JavaScript'in Resmi Standardı

ECMAScript ve JavaScript arasındaki ilişkiyi anlamak için şöyle düşünün:

Analoji: ECMAScript bir tarif kitabıdır — yemeklerin nasıl yapılacağını tarif eder. JavaScript ise o tariflere göre pişirilen yemektir. Farklı aşçılar (tarayıcılar) aynı tarife göre pişirseler bile, her birinin lezzeti biraz farklı olabilir. Ama hepsi aynı tarifi takip eder.

ECMAScript spesifikasyonu, JavaScript'in nasıl çalışması gerektiğini tanımlar. Tarayıcı üreticileri (Google, Mozilla, Apple, Microsoft) bu spesifikasyona uygun JavaScript motorları geliştirirler.

Önemli ECMAScript Sürümleri

YılSürümÖne Çıkan Özellikler
1997ES1İlk standart
1999ES3try/catch, regex — gerçek anlamda kullanılabilir hale geldi
2009ES5strict mode, JSON desteği, Array metotları (forEach, map, filter)
2015ES6 / ES2015Devrim niteliğinde: let/const, arrow functions, class, Promise, template literals, destructuring, modules
2016ES2016Array.includes(), üs operatörü (**)
2017ES2017async/await, Object.entries()
2020ES2020Optional chaining (?.), nullish coalescing (??)
2023ES2023Array.findLast(), toSorted(), toReversed()

ES6 (2015) bir dönüm noktasıdır. JavaScript bu sürümle birlikte modern bir programlama dili haline geldi. Bu kursta öğreneceğiniz özelliklerin büyük çoğunluğu ES6 ve sonrasından gelir. ES6'dan önce JavaScript ile ciddi proje yazmak gerçekten zordu — callback hell, var ile scope sorunları, modül sistemi eksikliği gibi problemler geliştiricileri çileden çıkarıyordu. ES6, bu sorunların çoğunu çözdü.

⚠️ Dikkat: "ES6" ve "ES2015" aynı şeydir. 2015'ten itibaren ECMAScript, yıllık sürüm döngüsüne geçti. O yüzden ES2016, ES2017 gibi yıl bazlı isimlendirme kullanılır. Ama "ES6" terimi o kadar yerleşti ki, hâlâ yaygın olarak kullanılır.


JavaScript Ne Tür Bir Dildir?

JavaScript'i tanımlarken birkaç önemli özelliğini bilmeniz gerekir. Bu özellikler, JavaScript'i diğer dillerden ayıran ve onun davranışını anlamanızı sağlayan temel kavramlardır.

1. Yorumlanan (Interpreted) Dil

C++ veya Java gibi dillerde yazdığınız kodu önce derlemeniz (compile) gerekir — kaynak kodu makine koduna çevrilir, sonra çalıştırılır. JavaScript'te böyle bir adım yoktur. Yazdığınız kod doğrudan yorumlanır ve çalıştırılır.

Ancak modern JavaScript motorları (V8, SpiderMonkey) aslında JIT (Just-In-Time) derleme kullanır. Yani kod çalışırken, sık kullanılan parçalar anında makine koduna derlenir. Bu, yorumlanan dillerin performans dezavantajını büyük ölçüde ortadan kaldırır.

// Bu kodu yazdığınız anda çalıştırabilirsiniz
// Derleme adımı yok — kaydet ve çalıştır
console.log("Merhaba, JavaScript!");

2. Dinamik Tipli (Dynamically Typed)

Java veya C#'ta bir değişken tanımlarken tipini belirtirsiniz: int sayi = 5;. JavaScript'te böyle bir zorunluluk yoktur. Bir değişkenin tipi, ona atadığınız değere göre çalışma zamanında belirlenir.

let veri = 42;          // şu an number
veri = "merhaba";       // artık string — JavaScript buna izin verir!
veri = true;            // artık boolean — sorun yok!

Bu esneklik, hızlı prototip geliştirmek için harika olsa da, büyük projelerde hatalara yol açabilir. İşte TypeScript'in ortaya çıkma nedeni de budur — JavaScript'e tip güvenliği ekler. Kursun ilerleyen bölümlerinde TypeScript'i de öğreneceksiniz.

3. Çoklu Paradigma (Multi-Paradigm)

JavaScript, sizi tek bir programlama tarzına zorlamaz. Hem prosedürel, hem nesne yönelimli (OOP), hem de fonksiyonel programlama yapabilirsiniz:

// Prosedürel — adım adım işlemler
let toplam = 0;
for (let i = 1; i <= 10; i++) {
  toplam += i;
}

// Fonksiyonel — veriyi dönüştürerek ilerle
const sayilar = [1, 2, 3, 4, 5];
const toplamFonksiyonel = sayilar.reduce((acc, n) => acc + n, 0);

// Nesne Yönelimli — class ve objelerle çalış
class Hesap {
  constructor(bakiye) {
    this.bakiye = bakiye;
  }
  paraCek(miktar) {
    this.bakiye -= miktar;
  }
}

Bu esneklik JavaScript'in güçlü yanlarından biridir. Farklı problemlere farklı yaklaşımlar uygulayabilirsiniz. Ama bu aynı zamanda "her şeyi her yerde yapabilirsin" demek olduğu için, disiplinli olmayı da gerektirir.

4. Tek İş Parçacıklı (Single-Threaded) ama Asenkron

JavaScript aynı anda sadece bir iş yapabilir. Ama "beklerken boş durmaz" — dosya okuma, API çağrısı gibi uzun süren işlemleri arka plana atar ve sonuç gelince devam eder. Bunu event loop mekanizmasıyla yapar. Bu konuyu Bölüm 5'te derinlemesine işleyeceğiz.

💡 İpucu: Şimdilik şunu bilin: JavaScript tek bir yolda araba kullanan ama trafiği çok akıllıca yöneten bir şoför gibidir. Kırmızı ışıkta durmak yerine, "kırmızı ışık geçince beni ara" der ve başka işe bakar.


JavaScript Nerede Çalışır?

JavaScript'in en büyük gücü, neredeyse her yerde çalışabilmesidir. Ama her ortamda farklı bir "motor" tarafından çalıştırılır.

Tarayıcıda JavaScript

JavaScript'in doğal habitat'ı tarayıcılardır. Her modern tarayıcı bir JavaScript motoru barındırır:

TarayıcıJavaScript Motoru
Google ChromeV8
Mozilla FirefoxSpiderMonkey
SafariJavaScriptCore (Nitro)
Microsoft EdgeV8 (Chromium tabanlı)

Tarayıcıdaki JavaScript şu özelliklere sahiptir:

  • DOM'a erişim: Sayfadaki HTML elementlerini okuyabilir, değiştirebilir, silebilir

  • Kullanıcı etkileşimi: Tıklama, kaydırma, form doldurma gibi olayları dinleyebilir

  • Web API'leri: fetch (HTTP istekleri), localStorage, geolocation, notification gibi tarayıcı API'lerini kullanabilir

  • Güvenlik kısıtlamaları: Kullanıcının dosya sistemine doğrudan erişemez, başka sitelerin verilerine erişemez (same-origin policy)

// Tarayıcıda çalışan JavaScript örneği
// Bir butona tıklanınca mesaj gösterir
document.getElementById("myButton").addEventListener("click", function() {
  alert("Butona tıklandı!");
});

// Sayfanın arka plan rengini değiştirir
document.body.style.backgroundColor = "#f0f0f0";

Node.js — Sunucu Tarafında JavaScript

2009 yılında Ryan Dahl, Google'ın V8 motorunu tarayıcıdan çıkarıp bağımsız bir çalışma ortamına dönüştürdü. Böylece Node.js doğdu. Bu, JavaScript'in tarihindeki en büyük dönüm noktalarından biridir.

Node.js sayesinde JavaScript artık:

  • Sunucu uygulamaları yazabilir (Express.js, Fastify, NestJS)

  • Dosya sistemiyle çalışabilir (okuma, yazma, silme)

  • Veritabanlarına bağlanabilir (MongoDB, PostgreSQL, MySQL)

  • Komut satırı araçları oluşturabilir

  • Gerçek zamanlı uygulamalar yapabilir (chat, canlı bildirimler)

// Node.js'te çalışan JavaScript örneği
// Bir dosya oluşturur ve içine yazar
const fs = require('fs');

fs.writeFileSync('merhaba.txt', 'Merhaba, Node.js!');
console.log('Dosya oluşturuldu!');

// Basit bir web sunucusu oluşturur
const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
  res.end('Merhaba Dünya!');
});

server.listen(3000, () => {
  console.log('Sunucu 3000 portunda çalışıyor');
});

Tarayıcı vs Node.js — Temel Farklar

Bu iki ortam aynı dili konuşur ama farklı yeteneklere sahiptir:

ÖzellikTarayıcıNode.js
DOM manipülasyonu✅ Evet❌ Hayır
Dosya sistemi erişimi❌ Hayır (güvenlik)✅ Evet
window nesnesi✅ Evet❌ Hayır
global / globalThiswindowglobal
Modül sistemiES Modules (import/export)CommonJS (require) + ESM
Web API'leri (fetch, DOM)✅ EvetKısmen (fetch v18+)
npm paketleriBundler ile✅ Doğrudan

💡 İpucu: globalThis ES2020 ile gelen evrensel bir referanstır — hem tarayıcıda hem Node.js'te çalışır. Tarayıcıda window'a, Node.js'te global'a eşittir. Ortam bağımsız kod yazarken kullanışlıdır.


JavaScript Motorları Nasıl Çalışır?

JavaScript kodunuzun bilgisayarın anlayacağı makine koduna dönüşme sürecini anlamak, daha iyi JavaScript yazmanıza yardımcı olur. Bu süreci Google'ın V8 motoru üzerinden inceleyelim:

V8 Motoru'nun İş Akışı

Kaynak Kod (.js)
      ↓
   [Parser] — Kodu analiz eder, syntax hatalarını yakalar
      ↓
   [AST] — Abstract Syntax Tree (Soyut Sözdizim Ağacı)
      ↓
   [Ignition] — Bytecode'a çevirir (hızlı başlatma)
      ↓
   [Çalıştırma] — Bytecode yorumlanarak çalışır
      ↓
   [TurboFan] — Sık çalışan "sıcak" kod, optimize edilmiş makine koduna derlenir (JIT)
      ↓
   [Hızlı Çalıştırma] — Optimize edilmiş kod çok daha hızlı çalışır

Bu sürecin en önemli kısmı JIT (Just-In-Time) derlemedir. Motor, kodunuzun hangi bölümlerinin sık çalıştığını izler. Bir fonksiyon 100 kez çağrılmışsa, TurboFan onu optimize edilmiş makine koduna derler. Bu yüzden JavaScript, saf yorumlanan dillere göre çok daha hızlıdır.

⚠️ Dikkat: JIT derleme, tip tahminlerine dayanır. Eğer bir fonksiyon hep number ile çağrılıyorsa, motor buna göre optimize eder. Sonra o fonksiyonu string ile çağırırsanız, motor optimizasyonu geri alır (deoptimize) ve kodu yeniden yorumlamaya başlar. Bu yüzden aynı fonksiyonu tutarlı tiplerle çağırmak performans açısından önemlidir.


JavaScript Ekosistemi — Sadece Bir Dil Değil

JavaScript öğrenmek, sadece bir programlama dili öğrenmekten çok daha fazlasıdır. JavaScript etrafında devasa bir ekosistem oluşmuştur:

Frontend (Kullanıcı Arayüzü)

  • React — Facebook tarafından geliştirilen, bileşen tabanlı UI kütüphanesi

  • Vue.js — Öğrenmesi kolay, esnek framework

  • Angular — Google tarafından geliştirilen, büyük ölçekli uygulamalar için framework

  • Svelte — Derleme zamanında optimizasyon yapan yeni nesil framework

Backend (Sunucu)

  • Node.js — Sunucu tarafı JavaScript çalışma ortamı

  • Express.js — Minimalist web framework

  • NestJS — Enterprise seviye, TypeScript-first framework

  • Deno / Bun — Node.js alternatifleri, modern yaklaşımlar

Mobil Uygulama

  • React Native — JavaScript ile iOS ve Android uygulamaları

  • Ionic — Hibrit mobil uygulama geliştirme

Masaüstü Uygulama

  • Electron — VS Code, Discord, Slack gibi uygulamalar Electron ile yapılmıştır

Araçlar

  • npm — Dünyanın en büyük paket yöneticisi (2 milyondan fazla paket)

  • Webpack / Vite — Modül paketleyiciler

  • TypeScript — JavaScript'e tip güvenliği ekleyen süperset

  • ESLint / Prettier — Kod kalitesi ve formatlama araçları

Bu ekosistem, "JavaScript öğren, her yerde uygula" felsefesini mümkün kılıyor. Tek bir dil öğrenerek frontend, backend, mobil ve masaüstü geliştirme yapabilirsiniz. Bu, hiçbir başka programlama dilinin sunamadığı bir avantajdır.


JavaScript'in Güçlü ve Zayıf Yanları

Hiçbir dil mükemmel değildir. JavaScript'in güçlü yanlarını bilmek kadar, zayıf yanlarını bilmek de önemlidir — çünkü zayıf yanları bilmek, tuzaklardan kaçınmanızı sağlar.

Güçlü Yanları

  1. Her yerde çalışır: Tarayıcı, sunucu, mobil, masaüstü, IoT

  2. Devasa topluluk: Stack Overflow'da en çok soru sorulan dil

  3. Düşük giriş engeli: Tarayıcı açın, console'a yazın, çalışır

  4. Zengin ekosistem: npm'de 2 milyondan fazla paket

  5. Sürekli gelişim: Her yıl yeni ECMAScript özellikleri

  6. İş imkanı: Full-stack geliştirme yapabilme yeteneği

Zayıf Yanları

  1. Tip güvenliği yok: Dinamik tipleme büyük projelerde sorun çıkarabilir

  2. Garip davranışlar: Type coercion tuzakları ([] + [] === "", NaN !== NaN)

  3. `this` karmaşası: Bağlama göre değişen this referansı kafa karıştırıcıdır

  4. Fragmantasyon: Farklı tarayıcılar farklı özellikleri farklı zamanlarda destekler

  5. Callback hell: Asenkron kod yönetimi (async/await ile büyük ölçüde çözüldü)

// JavaScript'in garip taraflarından bir örnek
console.log([] + []);        // "" (boş string!)
console.log([] + {});        // "[object Object]"
console.log({} + []);        // 0 (bazı ortamlarda)
console.log(typeof null);    // "object" (bu bir bug, 1995'ten beri!)
console.log(NaN === NaN);    // false (NaN kendisine bile eşit değil!)
console.log(0.1 + 0.2);     // 0.30000000000000004 (IEEE 754 floating point)

Bu garipliklerin çoğunun tarihsel nedenleri vardır. JavaScript 10 günde tasarlandı ve geriye dönük uyumluluk (backward compatibility) sebebiyle bu davranışlar değiştirilemiyor. Ama endişelenmeyin — bu kursun ilerleyen derslerinde bu tuzakların her birini detaylıca öğrenecek ve nasıl kaçınacağınızı bileceksiniz.


JavaScript'in Günümüzdeki Yeri

Rakamlarla JavaScript (2024)

  • GitHub'da en çok kullanılan programlama dili (#1, üst üste 10+ yıl)

  • Stack Overflow Developer Survey'de en popüler dil (#1)

  • npm'de haftalık 35+ milyar paket indirme

  • Web sitelerinin %98'i JavaScript kullanıyor (W3Techs)

JavaScript Öğrenmeli miyim?

Eğer şu alanlardan herhangi biriyle ilgileniyorsanız, cevap kesinlikle evet:

  • 🌐 Web geliştirme (frontend veya full-stack)

  • 📱 Mobil uygulama geliştirme (React Native)

  • 🖥️ Masaüstü uygulama (Electron)

  • 🤖 Otomasyon ve araç geliştirme (Node.js scripts)

  • 🎮 Oyun geliştirme (Phaser.js, Three.js, Babylon.js)

JavaScript, programlama öğrenmek için de mükemmel bir başlangıç dilidir. Çünkü:

  • Kurulum gerektirmez — tarayıcınız zaten bir JavaScript çalıştırıcısıdır

  • Sonuçlarını anında görebilirsiniz — görsel geri bildirim motivasyonu artırır

  • Topluluk desteği muazzamdır — karşılaştığınız her sorunun cevabı internette vardır


Yaygın Yanlış Anlamalar

Başlamadan önce bazı yaygın yanlış anlamaları düzeltelim:

❌ "JavaScript sadece basit scriptler için"

Gerçek: Netflix, PayPal, LinkedIn, Uber gibi dev şirketler sunucu tarafında Node.js kullanıyor. VS Code tamamen JavaScript/TypeScript ile yazılmıştır.

❌ "JavaScript yavaş bir dil"

Gerçek: V8 motoru ve JIT derleme sayesinde JavaScript, C++ kadar hızlı olmasa da, çoğu uygulama için fazlasıyla yeterli performansı sunar. Özellikle I/O yoğun işlemlerde (web sunucuları) Node.js çok başarılıdır.

❌ "JavaScript ile ciddi uygulama yazılmaz"

Gerçek: TypeScript eklentisiyle birlikte, büyük ölçekli enterprise uygulamalar güvenle yazılabilir. Angular, NestJS gibi framework'ler buna yöneliktir.

❌ "JavaScript öğrenmek kolay"

Gerçek: Başlamak kolaydır, ama derinlemesine öğrenmek zordur. Closure, prototype chain, event loop, asenkron programlama gibi konular ciddi çaba gerektirir. Bu kurs, sizi o derinliğe götürmek için tasarlandı.


Bu Kursta Neler Öğreneceksiniz?

Bu kurs, sizi JavaScript'in temellerinden TypeScript'in ileri seviye özelliklerine kadar götürecek kapsamlı bir yolculuktur:

BölümKonuÖğreneceğiniz
1JavaScript'e GirişDeğişkenler, tipler, operatörler
2Kontrol & Fonksiyonlarif/else, döngüler, fonksiyonlar, closure
3Diziler & NesnelerArray metotları, Object, JSON, Map/Set
4DOM ManipülasyonuElement seçme, event handling, proje
5Asenkron JavaScriptPromise, async/await, Fetch API
6Modern JS (ES6+)Modüller, iterator, Proxy
7OOP & PrototiplerClass, kalıtım, design patterns
8-9TypeScriptTipler, interface, generics, ileri tipler
10Web API'leriStorage, Web Workers, Canvas
11Test & KaliteJest, ESLint, Prettier
12Gerçek Dünyanpm, performans, kariyer

Her bölümde öğrendiklerinizi pekiştirmek için quiz ve pratik ödevler bulacaksınız. Teori + pratik dengesi, öğrenmenin en etkili yoludur.


İlk JavaScript Kodunuz

Henüz ortam kurmadık — bir sonraki derste yapacağız — ama JavaScript'in ne kadar basit başlayabileceğini görelim. Tarayıcınızı açın, sağ tıklayın, "Inspect" veya "Geliştirici Araçları"nı seçin ve Console sekmesine gidin. Ardından şunu yazın:

// Tarayıcı konsolunda deneyin
console.log("Merhaba, JavaScript dünyası!");

// Basit bir hesaplama
let yil = 2025;
let dogumYili = 1995;
let yas = yil - dogumYili;
console.log("Yaşınız: " + yas);

// Küçük bir fonksiyon
function selamla(isim) {
  return `Hoş geldin, ${isim}! JavaScript öğrenmeye hazır mısın?`;
}

console.log(selamla("Tolgahan"));
// Çıktı: "Hoş geldin, Tolgahan! JavaScript öğrenmeye hazır mısın?"

Bu birkaç satır kodda bile JavaScript'in birçok özelliğini görebilirsiniz: değişken tanımlama (let), string birleştirme, fonksiyon oluşturma, template literal (` `` ile string). Tüm bunları ilerleyen derslerde detaylıca öğreneceksiniz.


Özet

  • 🔹 JavaScript, 1995'te Brendan Eich tarafından 10 günde oluşturulan, web'in programlama dilidir

  • 🔹 ECMAScript, JavaScript'in standart spesifikasyonudur. ES6 (2015) en büyük dönüm noktasıdır

  • 🔹 JavaScript dinamik tipli, çoklu paradigma destekleyen, tek iş parçacıklı ama asenkron bir dildir

  • 🔹 Tarayıcıda DOM manipülasyonu ve kullanıcı etkileşimi, Node.js'te sunucu, dosya sistemi ve veritabanı işlemleri yapabilirsiniz

  • 🔹 JavaScript ekosistemi devasa: React, Vue, Angular, Express, npm — hepsi JavaScript dünyasının parçası

  • 🔹 Garip davranışları ve zayıf yanları vardır, ama güçlü yanları bunları fazlasıyla telafi eder — ve bu kurs o tuzakları öğrenmenizi sağlayacak