---
title: 'JavaScript Nedir'
source: 'https://academia.sh/tr/kurslar/javascript-temelleri/javascript-nedir'
course: 'JavaScript Temelleri'
language: tr
updated: '2026-08-17T18:09:47+00:00'
license: 'CC BY-SA 4.0'
---

# JavaScript Nedir

Dil, motor, çalışma zamanı ve standart ayrımı; ECMAScript'in tanımladığı ile barındıran ortamın eklediği arasındaki sınır.

Programlama Temelleri kursunda değişken, ifade, koşul, döngü ve fonksiyon kavramları
dilden bağımsız olarak kuruldu. Bu kurs aynı kavramların tek bir dildeki karşılığını
değil, o dilin kendine özgü kararlarını inceler: bir adın hangi kapsamda görüldüğünü,
iki değerin hangi kurala göre eşit sayıldığını, bir tipin başka bir tipe hangi adımlarla
dönüştürüldüğünü.

Bu incelemeye başlamadan önce bir ayrım gerekir. "JavaScript" adı günlük konuşmada
birbirinden farklı üç şeyi birden karşılar: bir dil, o dili yürüten bir program ve o
programın çevresindeki hizmetler. Bu dersin konusu bu üçünün sınırıdır. Sınır
bilinmediğinde, bir tarayıcıda çalışan betiğin sunucuda neden çalışmadığı sorusunun
yanıtı da bulunamaz.

## Dil, Motor ve Çalışma Zamanı

**Dil**, sözdizimi ve anlambilimidir: hangi karakter dizilerinin geçerli program olduğu
ve geçerli bir programın ne anlama geldiği. `const`, `+`, `if` gibi yapılar ve bunların
davranışı dile aittir.

**Motor (engine)**, dili yürüten programdır. Kaynak metni ayrıştırır, iç gösterime
çevirir ve çalıştırır. Bilgisayarlar Nasıl Çalışır kursundaki Derleyici, Yorumlayıcı ve
Sanal Makine dersinde tanımlanan karma model burada geçerlidir: kaynak önce bayt koduna
çevrilir, sık çalışan bölümler ise anında derleme ile makine koduna dönüştürülür. Bu
nedenle "JavaScript yorumlanan bir dildir" cümlesi eksiktir; yürütme modeli motorun
kararına bağlıdır ve dil tanımının bir parçası değildir.

**Çalışma zamanı (runtime)**, motorun etrafındaki barındıran ortamdır (host
environment). Motor tek başına dosya okuyamaz, ekrana yazamaz, ağa bağlanamaz. Bu
yetenekleri barındıran ortam sağlar. Tarayıcı bir barındıran ortamdır; belge nesnelerini
ve sayfa olaylarını sunar. Sunucu tarafı çalışma zamanı da bir barındıran ortamdır;
dosya sistemi ve ağ soketleri sunar.

Üç katman birbirinden bağımsız değişebilir. Aynı dil, farklı motorlarla yürütülebilir;
aynı motor, farklı barındıran ortamların içine yerleştirilebilir.

## Standart Ne Söyler, Ne Söylemez

Dilin tanımı **ECMAScript** adlı standarttır. Bu ad ile "JavaScript" arasındaki ilişki
tarihseldir; kurs boyunca dilin kendisi kastedildiğinde **JavaScript**, standardın
belirlediği kural kastedildiğinde **ECMAScript** yazılacaktır.

Standardın kapsamı bellidir:

- Sözdizimi ve dilbilgisi.
- Değer tipleri ve bunlar üzerindeki işlemler.
- Yerleşik nesneler: `Object`, `Array`, `String`, `Math`, `JSON`, `Date`, `Map`, `Set`
  ve benzerleri.
- Soyut işlemler: iki değerin nasıl karşılaştırılacağı, bir değerin sayıya nasıl
  çevrileceği gibi adım adım tanımlı yordamlar. Bu kursun Değerler ve Tipler konusu
  büyük ölçüde bu yordamları okur.

Standardın kapsamı dışında kalanlar en az bunlar kadar önemlidir. Ekrana yazma, dosya
okuma, ağ isteği gönderme, zamanlayıcı kurma ve belgeye erişme ECMAScript'te tanımlı
değildir. Bu işlerin tümü barındıran ortamdan gelir. `console` nesnesi bile standardın
parçası değildir; yaygın olarak bulunmasının nedeni standart olması değil, barındıran
ortamların onu sağlamayı seçmesidir.

## Bir Adın Nereden Geldiğini Sınamak

Ayrım soyut kalmasın: bir adın hangi katmandan geldiği doğrudan sınanabilir. `typeof`
işleci, tanımsız bir ad için hata vermeden `"undefined"` üretir; bu yüzden yoklama için
uygundur.

```js
console.log(typeof globalThis.Math);      // standarttan gelir
console.log(typeof globalThis.JSON);      // standarttan gelir
console.log(typeof globalThis.console);   // barındıran ortamdan gelir
console.log(typeof globalThis.document);  // yalnızca belge tabanlı ortamda bulunur
```

Sunucu tarafı çalışma zamanında çalıştırıldığında:

```
object
object
object
undefined
```

`Math` ve `JSON` her ECMAScript ortamında bulunur. `console` bu ortamda vardır ama
standarttan değil, ortamın kendisinden gelir. `document` ise yoktur: belge nesnesi,
sayfayı gösteren bir ortamın sunduğu bir şeydir. Aynı dört satır tarayıcı konsolunda
çalıştırıldığında dördüncü satır `object` üretir; ilk üçü değişmez.

`globalThis`, o ortamdaki genel nesneye taşınabilir biçimde erişmenin adıdır. Genel
nesnenin adı ortamlar arasında değiştiği için, taşınabilir kod bu adı kullanır.

Buradan pratik bir kural çıkar: bir betik "her yerde çalışır" olacaksa, yalnızca
standardın tanımladığı adlara dayanmalıdır. Dosya okuma veya ekrana yazma gerektiği anda
betik bir barındıran ortama bağlanmış olur.

## Betik Nasıl Yürütülür

Bir dosya çalıştırıldığında iki ayrı aşama vardır ve ikisi arasındaki fark, hata
iletilerini okumanın temelidir.

Önce **ayrıştırma** yapılır. Kaynak metnin tamamı dilbilgisine göre çözümlenir. Bu
aşamada bulunan hata bir sözdizim hatasıdır ve programın hiçbir satırı çalışmaz:

```js
console.log("bu satir yazilir mi?");
const x = ;
```

Bu dosya çalıştırıldığında `bu satir yazilir mi?` **yazılmaz**. Çıktı yalnızca hatayı
bildirir; iletinin özü şudur:

```
SyntaxError: Unexpected token ';'
```

Ayrıştırma başarılıysa **yürütme** başlar. Bu aşamada ortaya çıkan hata çalışma zamanı
hatasıdır ve kendisinden önceki satırlar çalışmış olur:

```js
console.log("bu satir yazilir");
const kayit = null;
console.log(kayit.sicaklik);
```

```
bu satir yazilir
```

Ardından yürütme durur ve şu ileti verilir:

```
TypeError: Cannot read properties of null (reading 'sicaklik')
```

Her iki durumda da çalışma zamanı, iletiden önce dosyanın tam yolunu, hatanın bulunduğu
satırı ve bir yığıt izini (stack trace) yazar. Bu satırlar makineye ve sürüme göre
değiştiği için burada gösterilmemiştir; kursta hata çıktılarının yalnızca değişmeyen
bölümü verilecektir. Hata iletisini okumanın yolu Kod Çalıştırma Yolları dersinde
ayrıntılanır.

Programlama Temelleri kursunun Program Nedir dersinde kurulan üçlü ayrım — sözdizim
hatası, çalışma zamanı hatası, mantık hatası — burada birebir geçerlidir. Değişen tek
şey, hatanın hangi aşamada göründüğünün somut olarak gözlenebilmesidir.

## Kursun Ekseni: Ölçüm Kayıtları

Kurs boyunca tek bir somut problem üzerinde çalışılacak: bir ölçüm istasyonu
kümesinden gelen okumaların listesi. Bu liste ders ders büyüyecek; önce yalın sayılar,
sonra alanları olan kayıtlar, sonunda metinden okunup dönüştürülen ve yeniden metne
yazılan bir veri kümesi olacak.

İlk hali dört sıcaklık okumasından ibarettir:

```js
const sicakliklar = [21.5, 19.75, 23, 18.25];
let toplam = 0;
for (const deger of sicakliklar) {
  toplam += deger;
}
console.log("okuma sayisi:", sicakliklar.length);
console.log("en yuksek:", Math.max(...sicakliklar));
console.log("ortalama:", toplam / sicakliklar.length);
```

```
okuma sayisi: 4
en yuksek: 23
ortalama: 20.625
```

Bu betikteki her ad iki kaynaktan birine aittir. `const`, `let`, `for` ve `of` dile;
`Array` ve `Math` standardın yerleşik nesnelerine; `console` ise barındıran ortama.
Betiği tarayıcıda çalıştırmak yalnızca son bağı değiştirir — dilin ve yerleşik
nesnelerin davranışı aynıdır.

Çıktıdaki `23` değerine dikkat edin: kaynakta `23` yazıldı ve `23` yazıldı, `23.0`
değil. Sayı gösteriminin bu ayrıntısı Değerler ve Tipler konusunun konusudur ve
Bilgisayarlar Nasıl Çalışır kursundaki Kayan Noktalı Sayılar dersinin doğrudan
sonucudur.

## Özet

- "JavaScript" adı üç katmanı birden anlatır: dil, dili yürüten motor ve motorun
  çevresindeki barındıran ortam. Üçü bağımsız değişebilir.
- Dilin tanımı ECMAScript standardıdır; standart sözdizimi, değer tiplerini, yerleşik
  nesneleri ve soyut işlemleri kapsar.
- Ekrana yazma, dosya okuma, ağ erişimi ve belge nesneleri standartta yoktur; barındıran
  ortamdan gelir. `console` bile bu sınıftadır.
- `typeof globalThis.ad` yoklaması, bir adın hangi katmandan geldiğini hata vermeden
  sınar.
- Ayrıştırma hatası hiçbir satırı çalıştırmaz; çalışma zamanı hatası kendisinden önceki
  satırlar çalıştıktan sonra ortaya çıkar.

## Sonraki Adım

Betiğin nerede çalıştığı, hangi adların bulunduğunu belirliyor. Sonraki ders bu
çalıştırma yollarını tek tek ele alacak: tarayıcı konsolu, sayfaya bağlanan betik
etiketi ve komut satırından çağrılan sunucu tarafı çalışma zamanı. Aynı ölçüm betiği üç
yolda da çalıştırılacak; aralarındaki farkın nereden geldiği ve bir hata iletisinin
hangi bölümünün okunmaya değer olduğu görülecek.
