ViraStack
  • Academy
  • About
  • Support
HomeSourcesContribute
ViraStack

A DX-first toolkit for frontend developers: starters, agent rules, form hooks, and a guide.

Products

  • ViraStack Start
  • ViraStack AI
  • ViraStack Mask
  • ViraStack Password
  • ViraStack Guide

Explore

  • Academy
  • About
  • Brand
  • Support

© 2026 ViraStack.

Open source · MIT

Web Temelleri

06 / 07

JavaScript

Dilin temelleri, DOM ve asenkron akış.

JavaScript Nedir

JavaScript, web sayfalarını etkileşimli yapan programlama dilidir. HTML içeriği, CSS görünümü tanımlar; bir sayfa sabit bilgi göstermekten fazlasını yapıyorsa (menü açılıyor, form kontrol ediliyor, veri sunucudan geliyorsa) arkasında JavaScript vardır.1 Aynı dil tarayıcının dışında Node.js ile de çalışır; React projelerindeki geliştirme sunucusu, build araçları ve paketler de JavaScript'tir.

Bu ders dilin tamamını anlatmaz. React'e geçmeden önce bilinmesi gereken temellere kısaca değinir, her konuda derinleşmek için kaynak gösterir.

JavaScript sayfaya <script> etiketiyle eklenir. Modern yöntem type="module" kullanmaktır; modül script'ler HTML işlenene kadar bekler, bu yüzden <head> içine koymak güvenlidir.1

<script type="module" src="main.js"></script>

Kodu denemenin en kısa yolu tarayıcının DevTools konsoludur: herhangi bir sayfada konsolu açıp console.log("merhaba") yazmak yeterlidir.

Değişkenler ve Tipler

Değişken tanımlamanın üç yolu vardır. var eski ve hataya açık davranışları yüzünden artık kullanılmaz.2

const site = "ViraStack"; // yeniden atanamaz
let sayac = 0; // yeniden atanabilir
sayac = sayac + 1;

MDN'in kuralı kısadır: "Mümkünse const, gerekirse let."2 const değişkenin yeniden atanmasını engeller, içindeki object'in değişmesini engellemez.

JavaScript dinamik tipli bir dildir: değişkenin tipi tanımlanmaz, aynı değişkene farklı tipte değerler atanabilir. Temel (primitive) tipler string, number, boolean, null, undefined, bigint ve symbol'dür; geri kalan her şey (array ve fonksiyon dahil) object'tir.3

Dil gerektiğinde tipleri kendiliğinden dönüştürür. Bu yüzden karşılaştırmada === kullanılır; == önce tip dönüştürür ve sonucu tahmin etmek zordur.4

0 == "0"; // true
0 === "0"; // false

Tip

Tip hatalarını kod çalışmadan yakalamak için JavaScript projelerinin çoğu artık TypeScript kullanıyor. State of JS 2025'te katılımcıların %40'ı yalnızca TypeScript yazdığını söyledi.5 TypeScript'i bu yol haritasının sonraki bölümünde ayrıca ele alıyoruz.

Fonksiyonlar

Fonksiyon, tekrar kullanılabilen bir kod bloğudur. İki yaygın yazımı vardır: klasik function declaration ve daha kısa arrow function.6

function topla(a, b) {
  return a + b;
}

const carp = (a, b = 1) => a * b; // b verilmezse 1 olur

React component'leri ve olay işleyicileri çoğunlukla arrow function ile yazılır.

Closure

Bir fonksiyon, tanımlandığı yerdeki değişkenleri o kapsam bittikten sonra da hatırlar. Buna closure denir.67

function sayacOlustur() {
  let sayi = 0;
  return () => ++sayi;
}

const say = sayacOlustur();
say(); // 1
say(); // 2

Closure, React'te hook'ların ve olay işleyicilerinin nasıl çalıştığını anlamanın temelidir; bir component'in içindeki fonksiyon, o render'daki state'i "hatırlar".

Object ve Array

Object anahtar ve değer çiftlerinden, array sıralı değerlerden oluşur. Sunucudan gelen veri neredeyse her zaman bu ikisinin birleşimidir.

const kullanici = { ad: "Ayşe", yas: 28 };
const urunler = [
  { ad: "Kalem", fiyat: 20 },
  { ad: "Defter", fiyat: 45 },
];

Destructuring ve spread

Destructuring, object ya da array'den değerleri tek satırda değişkene çıkarır. Spread (...) ise bir object ya da array'i başka birinin içine açar.89

const { ad, yas } = kullanici;
const guncel = { ...kullanici, yas: 29 }; // yeni object, orijinal değişmez
const hepsi = [...urunler, { ad: "Silgi", fiyat: 10 }];

Spread sığ kopya üretir: iç içe object'ler kopyalanmaz, aynı referans paylaşılır.9 React'te state'i değiştirmek yerine bu şekilde yeni bir kopya oluşturursunuz.

Array metotları

En sık kullanılan metotlar şunlardır:10

MetotNe yapar
mapHer elemanı dönüştürüp yeni bir dizi döndürür
filterKoşulu sağlayanlardan yeni bir dizi döndürür
findKoşulu sağlayan ilk elemanı döndürür
reduceDiziyi tek bir değere indirger (toplam gibi)
const isimler = urunler.map((u) => u.ad); // ["Kalem", "Defter"]
const ucuzlar = urunler.filter((u) => u.fiyat < 30);
const toplam = urunler.reduce((t, u) => t + u.fiyat, 0); // 65

Warning

sort, reverse ve splice orijinal diziyi değiştirir.10 React state'i üzerinde kullanmadan önce kopyalayın: [...dizi].sort().

Eksik olabilecek değerler için iki kısa operatör vardır: kullanici.adres?.sehir adres yoksa hata vermek yerine undefined döner, deger ?? "varsayılan" ise değer null ya da undefined ise sağdakini kullanır.11

DOM ve Olaylar

Tarayıcı HTML'i okuyup bir ağaç yapısına çevirir; buna DOM (Document Object Model) denir. JavaScript bu ağaca erişip içeriği okuyabilir ve değiştirebilir.12

const baslik = document.querySelector("h1");
baslik.textContent = "Yeni başlık";
baslik.classList.add("aktif");

Olaylar (event), sistemde olan ve kodunuzun tepki verebileceği şeylerdir: tıklama, tuşa basma, formun gönderilmesi. Tepki vermek için addEventListener kullanılır.13

const form = document.querySelector("form");

form.addEventListener("submit", (e) => {
  e.preventDefault(); // sayfanın yeniden yüklenmesini engeller
  console.log("Form gönderildi");
});

Tip

React'te DOM'u bu şekilde elle değiştirmezsiniz; state'i güncellersiniz, React DOM'u sizin yerinize günceller. Yine de altta olanı bilmek, React'in neyi neden yaptığını anlamayı kolaylaştırır.

Asenkron Akış

Sunucudan veri çekmek gibi işlemler zaman alır. JavaScript bu süre boyunca beklemek yerine işini sürdürür ve sonuç gelince devam eder. Bu bekleme Promise ile temsil edilir: ileride tamamlanacak ya da başarısız olacak bir işlemin sonucunu taşıyan bir object.14

Promise ile çalışmanın okunaklı yolu async/await'tir. await, kodu senkron kod gibi yukarıdan aşağıya okunur hale getirir; hatalar try/catch ile yakalanır.15

async function urunleriGetir() {
  try {
    const yanit = await fetch("/api/urunler");
    if (!yanit.ok) {
      throw new Error(`Hata: ${yanit.status}`);
    }
    const urunler = await yanit.json();
    console.log(urunler);
  } catch (hata) {
    console.error(hata);
  }
}

Caution

fetch sunucu 404 ya da 500 döndürdüğünde hata fırlatmaz; yalnızca ağ hatasında başarısız olur. Bu yüzden yanit.ok her zaman kontrol edilmelidir.16

Event loop

JavaScript tek bir iş parçacığında (thread) çalışır ve her işi bitirmeden bir sonrakine geçmez.17 Bekleyen işler (zamanlayıcılar, tamamlanan Promise'ler, tıklamalar) bir kuyrukta sıralanır ve event loop onları sırayla çalıştırır. Bu mekanizmayı görsel olarak anlamanın en kısa yolu Lydia Hallie'nin 12 dakikalık videosudur.18

Modüller

Projeler büyüdükçe kod dosyalara bölünür. Her dosya bir modüldür; dışarıya açmak istediğini export ile verir, başka bir dosyadan ihtiyacını import ile alır.19

// fiyat.js
export const KDV = 0.2;
export default function kdvEkle(tutar) {
  return tutar * (1 + KDV);
}

// main.js
import kdvEkle, { KDV } from "./fiyat.js";

Süslü parantezli olanlar named export'tur ve istenildiği kadar olabilir. Parantezsiz olan default export'tur ve modül başına bir tanedir.19 React projelerinde her component bir modüldür ve bu iki yazımı sürekli görürsünüz.

Detaylı Öğrenmek İçin

  • Baştan sona rehber: javascript.info; dil ve tarayıcı (DOM, olaylar) bölümleri, güncel tutuluyor.20

  • Alıştırmalı kurs: MDN'in Dynamic scripting with JavaScript modülü.21

  • Ücretsiz kitap: Marijn Haverbeke'nin Eloquent JavaScript kitabının 4. baskısı.22

  • React öncesi kontrol listesi: Kent C. Dodds'un "JavaScript to Know for React" yazısı.11

  • Konuşma: Philip Roberts'ın event loop konuşması (JSConf EU 2014, 27 dk).23

  • Konuşma: Jake Archibald'ın tarayıcı event loop'u konuşması (JSConf.Asia 2018, 35 dk).24

Kaynaklar

  • 1DocsMDN: What is JavaScript?

    Dilin tanımı ve script'i sayfaya ekleme (`defer`, `async`, `type="module"`).

  • 2DocsMDN: Storing the information you need — Variables

    `var`, `let` ve `const` farkı; "Use `const` when you can, and use `let` when you have to."

  • 3DocsMDN: JavaScript data types and data structures

    Primitive tipler, dinamik ve zayıf tip sistemi.

  • 4DocsMDN: Equality comparisons and sameness

    Neredeyse her zaman `===` kullanmak ve `==`'den kaçınmak.

  • 5ResearchInfoQ: State of JavaScript 2025

    Yalnızca TypeScript yazanların oranı ve en büyük dil sıkıntısı olarak statik tip eksikliği.

  • 6DocsMDN: Functions

    Declaration, expression, arrow function, varsayılan parametre ve closure.

  • 7Articlejavascript.info: Variable scope, closure

    Closure'ın diyagramlarla adım adım anlatımı.

  • 8DocsMDN: Destructuring

    Object ve array destructuring, varsayılan değer ve rest.

  • 9DocsMDN: Spread syntax (...)

    Array ve object'te spread; sığ kopya.

  • 10Articlejavascript.info: Array methods

    `map`, `filter`, `find`, `reduce`; orijinali değiştiren ve yeni dizi döndüren metotlar.

  • 11ArticleKent C. Dodds: JavaScript to Know for React

    React için gereken JS özellikleri: destructuring, spread, array metotları, `?.`, `??` ve async/await.

  • 12DocsMDN: DOM scripting introduction

    DOM ağacı, `querySelector`, `textContent`, `classList`.

  • 13DocsMDN: Introduction to events

    `addEventListener`, event nesnesi ve `preventDefault`.

  • 14DocsMDN: Using promises

    Promise tanımı, zincirleme ve `Promise.all`.

  • 15DocsMDN: How to use promises

    Aynı `fetch` örneği önce Promise zinciri, sonra `async`/`await` ile.

  • 16DocsMDN: Using the Fetch API

    `fetch`'in HTTP hatalarında reject etmemesi ve `response.ok` kontrolü.

  • 17DocsMDN: JavaScript execution model

    Job queue, event loop ve run-to-completion.

  • 18VideoLydia Hallie: JavaScript Visualized - Event Loop, Web APIs, (Micro)task Queue

    Yaklaşık 12 dakika. Call stack, task ve microtask kuyruğu animasyonlarla.

  • 19DocsMDN: JavaScript modules

    `export`/`import`, named ve default export, `type="module"`.

  • 20Docsjavascript.info: The Modern JavaScript Tutorial

    Dil ve tarayıcı bölümleriyle baştan sona JavaScript rehberi.

  • 21DocsMDN: Dynamic scripting with JavaScript

    Değişkenlerden DOM, `fetch` ve JSON'a alıştırmalı modül.

  • 22ArticleMarijn Haverbeke: Eloquent JavaScript, 4. baskı

    2024 tarihli, ücretsiz okunabilen kitap; dil, tarayıcı ve Node bölümleri.

  • 23VideoPhilip Roberts: What the heck is the event loop anyway? (JSConf EU 2014)

    27 dakika. Call stack ve callback kuyruğunun görsel anlatımı.

  • 24VideoJake Archibald: In The Loop (JSConf.Asia 2018)

    35 dakika. Task, microtask, `requestAnimationFrame` ve render sırası.

Edit this page

Last updated: October 17, 2026

Previous step05. TailwindNext step07. Git