JavaScript mülakatları üç eksende ilerler: temel dil davranışı, kapsam/closure ve asenkron programlama. Aşağıda bu üç eksende en sık sorulan soruları, gerçek ve doğrulanmış cevaplarıyla bir araya getirdik — ezberlemek için değil, JavaScript'in neden bazen "garip" davrandığını gerçekten anlamak için kullanın.
Temel kavram soruları
== ile === arasındaki fark nedir?
== (gevşek eşitlik), karşılaştırmadan önce tip dönüşümü yapar — bu yüzden "5" == 5 true döner. === (katı eşitlik) ise hem değeri hem tipi karşılaştırır ve tip dönüşümü yapmaz. Beklenmedik davranışlardan kaçınmak için === kullanmak genel kabul gören iyi bir pratiktir.
var, let ve const arasındaki fark nedir?
var, fonksiyon kapsamlıdır (function-scoped) ve yeniden tanımlanabilir; ayrıca "hoisting" nedeniyle tanımlanmadan önce de erişilebilir (değeri undefined olarak). let ve const blok kapsamlıdır (block-scoped). let'in değeri değiştirilebilir, const'un değeri bir kez atandıktan sonra yeniden atanamaz — ama const bir nesneyse, nesnenin içindeki alanlar yine de değiştirilebilir.
Closure (kapanış) nedir?
Bir fonksiyonun, tanımlandığı kapsamdaki değişkenlere, o kapsam sona erdikten sonra bile erişebilmesidir. Örneğin bir fonksiyonun içinde tanımlanan başka bir fonksiyon, dış fonksiyon çalışmayı bitirdikten sonra bile dış fonksiyonun değişkenlerini "hatırlar". Closure'lar; sayaç, önbellekleme, veri gizleme gibi birçok pratik kalıbın temelidir.
this anahtar kelimesi neyi ifade eder?
Bir fonksiyonun çağrıldığı bağlama göre değişen, o an hangi nesne üzerinde çalışıldığını gösteren bir referanstır. Normal bir fonksiyonda this, fonksiyonun nasıl çağrıldığına göre değişir; ok fonksiyonlarda (arrow function) ise this, tanımlandığı kapsamdaki değeri korur — bu fark, mülakatlarda en sık karıştırılan konulardan biridir.
Hoisting nedir?
Değişken ve fonksiyon tanımlarının, kod çalıştırılmadan önce kapsamın en üstüne "taşınmış" gibi davranmasıdır. var ile tanımlanan değişkenler ve function ile tanımlanan fonksiyonlar hoisting'e tabidir; let ve const de hoisting'e tabidir ama tanımlanana kadar erişilmeye çalışılırsa hata verir (temporal dead zone).
Fonksiyonlar ve asenkron programlama soruları
Promise nedir?
Asenkron bir işlemin sonucunu (başarılı veya başarısız) temsil eden bir nesnedir. Üç durumu vardır: bekliyor (pending), tamamlandı (fulfilled) ve reddedildi (rejected). .then() ile başarı, .catch() ile hata durumu yönetilir. Promise, callback'lerin iç içe geçerek okunmaz hâle geldiği "callback hell" problemine bir çözüm olarak tasarlandı.
async/await ne işe yarar?
Promise tabanlı kodu, senkron kod gibi okunabilir şekilde yazmayı sağlayan bir söz dizimidir. await, bir Promise'in sonuçlanmasını bekler ve kod akışını o noktada durdurur (ama tarayıcıyı/motoru bloklamaz). Hata yönetimi için try/catch ile birlikte kullanılır — .then()/.catch() zincirlerine göre çoğu geliştiricinin daha okunabilir bulduğu bir yaklaşımdır.
Event loop nedir?
JavaScript'in tek thread'li olmasına rağmen asenkron işlemleri nasıl yönettiğini açıklayan mekanizmadır. Senkron kod önce call stack'te çalışır; asenkron işlemler (setTimeout, fetch gibi) tamamlandığında bir kuyruğa eklenir ve call stack boşaldığında event loop bu kuyruktaki işleri sırayla call stack'e taşır.
map(), filter() ve reduce() arasındaki fark nedir?
map(), bir diziyi baştan sona dönüştürüp aynı uzunlukta yeni bir dizi döndürür. filter(), bir koşulu sağlayan elemanları seçip yeni (genelde daha kısa) bir dizi döndürür. reduce() ise diziyi tek bir değere (toplam, obje, string gibi) indirger. Üçü de orijinal diziyi değiştirmez (immutable), bu da öngörülebilir kod yazmayı kolaylaştırır.
Spread ve rest operatörü arasındaki fark nedir?
İkisi de görsel olarak aynı üç nokta (...) söz dizimini kullanır ama bağlama göre ters işlev görür. Spread, bir diziyi veya nesneyi "açar" — örneğin bir diziyi başka bir dizinin içine kopyalarken kullanılır. Rest ise dağınık argümanları tek bir diziye "toplar" — bir fonksiyonun belirsiz sayıda argüman almasını sağlar.
AppFellas
Fikrinizi konuşalım.
Ücretsiz keşif görüşmesinde projenizi, bütçenizi ve zaman çizelgenizi netleştirelim.
Nesneler, prototipler ve performans soruları
Prototip zinciri (prototype chain) nedir?
JavaScript'te kalıtımın temelidir. Bir nesnede olmayan bir özelliğe erişilmeye çalışıldığında, JavaScript o nesnenin prototipine, sonra prototipin prototipine bakar; bu zincir null'a ulaşana kadar devam eder. class söz dizimi de arka planda bu prototip mekanizmasını kullanır.
Değer türü (primitive) ile referans türü arasındaki fark nedir?
String, number, boolean gibi primitive değerler kopyalandığında değerin kendisi kopyalanır — biri değişse diğeri etkilenmez. Nesne ve dizi gibi referans türleri ise kopyalandığında bellekteki aynı konuma işaret eder; birini değiştirmek diğerini de etkiler. Bu fark, beklenmedik yan etkilerin en sık kaynağıdır.
Debounce ile throttle arasındaki fark nedir?
İkisi de bir fonksiyonun ne sıklıkla çalışacağını sınırlar ama farklı şekilde. Debounce, art arda gelen çağrılarda yalnızca son çağrıdan belirli bir süre sonra fonksiyonu çalıştırır (arama kutusu gibi). Throttle ise fonksiyonun belirli bir aralıkta en fazla bir kez çalışmasını garanti eder (scroll olayı gibi).
null ile undefined arasındaki fark nedir?
undefined, bir değişkenin tanımlanmış ama henüz bir değer atanmamış olduğu durumu ifade eder — JavaScript motoru bunu otomatik atar. null ise bir değişkenin bilinçli olarak "boş" veya "değer yok" olarak işaretlenmesidir; programcı tarafından atanır. typeof null şaşırtıcı biçimde "object" döner — bu, dilin en eski ve bilinen tasarım hatalarından biridir.
Yüksek dereceli fonksiyon (higher-order function) nedir?
Başka bir fonksiyonu parametre olarak alan ya da bir fonksiyonu sonuç olarak döndüren fonksiyondur. map(), filter() ve reduce() birer yüksek dereceli fonksiyon örneğidir. Bu kavram, JavaScript'te fonksiyonların "birinci sınıf vatandaş" (first-class citizen) olmasının, yani değişken gibi taşınabilmesinin doğal bir sonucudur.
Deneyim ve proje soruları
Teknik sorulara ek olarak mülakatlarda deneyime dayalı sorular da sorulur: "Bir performans sorununu nasıl teşhis edip çözdünüz?", "Asenkron kod yazarken karşılaştığınız en zor hata neydi?", "Neden bu kütüphaneyi/yaklaşımı tercih ettiniz?" Beklenen, genel bir tanım değil; gerçek bir projeden somut ve ölçülebilir bir örnektir.
Mülakat süreci ve sık yapılan hatalar
Çoğu şirkette JavaScript mülakatı üç aşamalı işler: geçmiş projeler üzerine bir ön görüşme, canlı kodlama (küçük bir fonksiyon yazmak veya asenkron bir hatayı bulmak) ve kıdemli pozisyonlar için sistem tasarımı. Frontend pozisyonlarında React/Vue gibi bir framework bilgisi, backend (Node.js) pozisyonlarında ise Express veya benzeri bir çatı bilgisi de sıkça soruluyor — ama framework sorularından önce dilin temellerinin (closure, this, asenkron akış) sağlam olması bekleniyor.
- == ile === karıştırmak: Beklenmedik tip dönüşümleri, hata ayıklaması zor hatalara yol açar; === kullanmak varsayılan alışkanlık olmalı.
- this'in davranışını yanlış tahmin etmek: Özellikle callback ve event handler'larda this'in neye işaret ettiğini bilmemek en sık karşılaşılan hatalardan biri.
- Asenkron kodda hata yönetimini atlamak: Bir Promise zincirine .catch() eklemeyi veya async fonksiyonda try/catch kullanmayı unutmak, hataların sessizce kaybolmasına yol açar.
- Döngü içinde DOM'u sürekli güncellemek: Her değişiklikte doğrudan DOM'a dokunmak performansı düşürür; değişiklikleri toplayıp tek seferde uygulamak daha verimlidir.
JavaScript'i öğrenmeye yeni başlıyorsanız neden JavaScript öğrenmelisiniz yazımıza göz atabilirsiniz; React'e geçmeyi düşünüyorsanız da React mülakat sorularını inceleyebilirsiniz.
Sık sorulan sorular
JavaScript mülakatına hazırlanmak ne kadar sürer?
Temel sözdizimine hakimseniz, closure, this ve asenkron programlamayı derinlemesine anlamak birkaç haftalık odaklı çalışmayla mümkün. Süreyi asıl uzatan şey kavramları uygulamalı örneklerle pekiştirmemek.
JavaScript mülakatlarında en çok hangi konu soruluyor?
this'in davranışı, closure ve Promise/async-await ile asenkron akış en sık karşılaşılan üç konu. Bunlar aynı zamanda en çok yanlış anlaşılan konular.
Framework bilmeden JavaScript mülakatına girilir mi?
Junior pozisyonlarda genelde girilebilir; framework yerine dilin temelleri test edilir. Frontend ağırlıklı pozisyonlarda ise React, Vue gibi bir framework bilgisi büyük ölçüde beklenir.
JavaScript'te en çok karıştırılan konular hangileri?
== ile === farkı, this'in bağlama göre değişmesi ve var/let/const arasındaki kapsam farkı en sık yanlış anlaşılan üç konu. Bunları net anlatabilmek mülakatta olumlu bir izlenim bırakır.



