JavaScript, web geliştirme dünyasının en temel taşlarından biridir. Tarayıcı üzerinde çalışan dinamik bir programlama dili olan JavaScript, günümüzde yalnızca istemci tarafında değil, Node.js sayesinde sunucu tarafında da yaygın olarak kullanılmaktadır.
Eğer bir JavaScript geliştirici olarak bir mülakata hazırlanıyorsanız, temel ve ileri düzey konulara hâkim olmanız gerekir. ES6+ özellikleri, asenkron programlama, DOM manipülasyonu ve performans optimizasyonları gibi konular mülakatlarda sıklıkla sorulmaktadır.
Bu yazımızda, JavaScript ile ilgili en sık sorulan mülakat sorularını ve detaylı cevaplarını ele alacağız. Hem yeni başlayanlar hem de ileri seviye geliştiriciler için hazırlanmış bu rehber, mülakat süreçlerinde sizi bir adım öne taşıyacaktır.
Şimdi gelin, JavaScript mülakatlarında karşınıza çıkabilecek en yaygın sorulara ve cevaplarına birlikte göz atalım.
JavaScript, dinamik, nesne tabanlı (object-oriented) ve yüksek seviyeli bir programlama dili olup, en yaygın olarak web geliştirmede kullanılır. HTML ve CSS ile birlikte çalışarak sayfalara interaktif özellikler ekler.
Çalışma mantığı:
Özellik
var
let
const
Scope
Function Scope
Block Scope
Block Scope
Hoisting
Hoisted (değeri undefined olur)
Hoisted ama başlatılmadan kullanılamaz
Hoisted ama başlatılmadan kullanılamaz
Değer Değişikliği
Değiştirilebilir
Değiştirilebilir
Değiştirilemez
Re-declaration
Mümkün
Değil
Değil
javascript
CopyEdit
var x = 10;
let y = 20;
const z = 30;
Öneri: let ve const kullanımı daha güvenlidir, var yerine tercih edilmelidir.
JavaScript'te Primitive (ilkel) ve Reference (referans) olmak üzere iki ana veri türü vardır.
Operatör
Açıklama
Örnek
==
Değer karşılaştırır, tür dönüşümü yapabilir
5 == "5" → true
===
Hem türü hem de değeri karşılaştırır, tür dönüşümü yapmaz
5 === "5" → false
javascript
CopyEdit
console.log(5 == "5"); // true (type coercion nedeniyle)
console.log(5 === "5"); // false (türler farklı)
JavaScript'te bir değişkenin türü otomatik olarak başka bir türe çevrilebilir. Buna Type Coercion denir.
Terim
Açıklama
null
Bilinçli olarak atanmış "boş" bir değerdir
undefined
Değişken tanımlandı ama değeri atanmamış
javascript
CopyEdit
let a;
console.log(a); // undefined
let b = null;
console.log(b); // null
Hoisting, JavaScript'in değişken ve fonksiyon tanımlarını kod çalışmadan önce belleğe almasıdır.
javascript
CopyEdit
console.log(a); // undefined
var a = 5;
JavaScript bunu şu şekilde işler:
javascript
CopyEdit
var a;
console.log(a); // undefined
a = 5;
🔹 let ve const kullanıldığında hoisting olur ama değişkene erişmeden önce hata verir.
Closure, bir fonksiyonun kendi kapsamı dışındaki değişkenlere erişebilmesini sağlayan mekanizmadır.
Bu yapı veri gizliliği (data privacy) sağlamak için kullanılır.
Bu terimler DOM olaylarının nasıl yayıldığını açıklar.
Tür
Açıklama
Bubbling (Kabarcıklanma)
Olay, en içteki elemandan başlayıp yukarı doğru yayılır. (Varsayılan)
Capturing (Yakalama)
Olay, en dıştaki elemandan başlar ve içe doğru ilerler.
javascript
CopyEdit
document.getElementById("child").addEventListener("click", function() {
console.log("Child clicked!");
}, true); // true → Capturing mode
Callback function, başka bir fonksiyona parametre olarak verilen ve belirli bir olaydan sonra çağrılan fonksiyondur.
javascript
CopyEdit
function greet(name, callback) {
console.log("Merhaba " + name);
callback();
}
function goodbye() {
console.log("Görüşürüz!");
}
greet("Ali", goodbye);
🔹 Neden kullanılır?
Promise ve async/await, JavaScript’te asenkron işlemleri yönetmek için kullanılan yapılardır.
Bir işlemin sonucunu gelecekte döndüreceğini vaat eden bir nesnedir.
javascript
CopyEdit
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Veri yüklendi!");
}, 2000);
});
}
fetchData().then(data => console.log(data)).catch(error => console.log(error));
ES8 ile gelen async/await, Promise'lerin daha okunaklı kullanılmasını sağlar.
javascript
CopyEdit
async function fetchData() {
try {
let data = await new Promise((resolve) => setTimeout(() => resolve("Veri yüklendi!"), 2000));
console.log(data);
} catch (error) {
console.log(error);
}
}
fetchData();
Özellik
Promise
Async/Await
Okunabilirlik
Karmaşıklaşabilir (then, catch kullanımı)
Daha sade ve okunaklı
Hata Yönetimi
catch() ile yapılır
try/catch ile daha kontrol edilebilir
Kullanım Alanı
Zincirleme işlemler için iyi
Daha az kod ile aynı işlemi yapabilir
this, JavaScript’te çağrıldığı bağlama (context) göre değişiklik gösteren özel bir değişkendir.
Kullanım Türü
Açıklama
Global Scope
Tarayıcıda this, window nesnesini referans eder.
Object İçinde
Nesne içinde kullanıldığında, o nesneyi gösterir.
Function İçinde
this, window'a bağlıdır (strict mode dışındaysa).
Arrow Function İçinde
Arrow function'lar this'i kendi bağlamından almaz, üst bağlamı referans eder.
javascript
CopyEdit
const obj = {
name: "Ali",
sayHello: function() {
console.log(this.name); // "Ali"
}
};
obj.sayHello();
Özellik
Normal Fonksiyon
Arrow Function
this Bağlamı
Dinamik, çağrıldığı yere göre değişir
this üst bağlamdan alır
arguments Nesnesi
Mevcuttur
Bulunmaz
Kullanım Alanı
Genel kullanım
Callbacks, kısa fonksiyonlar
javascript
CopyEdit
// Normal fonksiyon
function normalFunc() {
console.log(this); // Çağrıldığı bağlama bağlıdır
}
// Arrow fonksiyon
const arrowFunc = () => {
console.log(this); // Üst kapsamın `this`'ini kullanır
};
Prototype, JavaScript'in nesne tabanlı miras yapısını sağlayan mekanizmadır.
javascript
CopyEdit
function Person(name) {
this.name = name;
}
Person.prototype.sayHello = function() {
console.log("Merhaba, " + this.name);
};
const ali = new Person("Ali");
ali.sayHello(); // "Merhaba, Ali"
Özellik
map()
forEach()
Geri dönüş değeri
Yeni bir dizi döner
undefined döner
Orijinal diziyi değiştirir mi?
Hayır
Hayır
Zincirleme (chaining) destekler mi?
Evet
Hayır
javascript
CopyEdit
let numbers = [1, 2, 3, 4];
let squared = numbers.map(num => num * num); // [1, 4, 9, 16]
numbers.forEach(num => console.log(num)); // Sadece ekrana yazdırır
Operatör
Açıklama
Spread (...)
Bir diziyi veya nesneyi açarak yayar
Rest (...)
Fonksiyonlara sınırsız parametre almak için kullanılır
javascript
CopyEdit
// Spread
let arr = [1, 2, 3];
let newArr = [...arr, 4, 5]; // [1, 2, 3, 4, 5]
// Rest
function sum(...numbers) {
return numbers.reduce((acc, num) => acc + num, 0);
}
console.log(sum(1, 2, 3)); // 6
Fonksiyon
Açıklama
setTimeout()
Belirtilen süre sonunda bir defa çalışır
setInterval()
Belirtilen aralıklarla sürekli çalışır
javascript
CopyEdit
setTimeout(() => console.log("Bu bir kere çalışır"), 2000);
setInterval(() => console.log("Bu her 2 saniyede çalışır"), 2000);
Teknik
Açıklama
Debounce
Belirli bir süre boyunca fonksiyon çağrılmazsa çalışır (ör: arama kutusu)
Throttle
Fonksiyon belirli aralıklarla çalışır (ör: scroll event)
javascript
CopyEdit
// Debounce
function debounce(func, delay) {
let timer;
return function(...args) {
clearTimeout(timer);
timer = setTimeout(() => func(...args), delay);
};
}
Event delegation, olayları dinlemek için ebeveyn bir öğeye olay bağlayarak performansı artırma tekniğidir.
javascript
CopyEdit
document.getElementById("parent").addEventListener("click", function(event) {
if (event.target.classList.contains("child")) {
console.log("Tıklanan eleman:", event.target.innerText);
}
});
Depolama Türü
Kalıcılık
Kapasite
Sunucuya Gönderilir mi?
localStorage
Kalıcı (manuel silinene kadar)
5MB
Hayır
sessionStorage
Sayfa kapatılınca silinir
5MB
Hayır
cookies
Süre sonuna kadar saklanır
4KB
Evet
javascript
CopyEdit
localStorage.setItem("key", "value");
console.log(localStorage.getItem("key")); // "value"
JavaScript, web geliştirme dünyasında kritik bir rol oynayan güçlü bir programlama dilidir. Hem istemci tarafında hem de sunucu tarafında kullanılabilmesi, onu modern yazılım geliştirme süreçlerinde vazgeçilmez hale getirmiştir.
Bu yazımızda, JavaScript mülakatlarında sıkça karşılaşabileceğiniz önemli soruları ve bu sorulara verilebilecek en iyi cevapları detaylı bir şekilde inceledik. Temel veri yapıları, asenkron programlama, fonksiyonel farklılıklar, DOM manipülasyonu ve depolama mekanizmaları gibi konular, iyi bir JavaScript geliştiricisinin mutlaka hakim olması gereken alanlardır.
Eğer bir JavaScript mülakatına hazırlanıyorsanız:
✔ Temel ve ileri düzey JavaScript konularını öğrenin.
✔ Kod pratiği yaparak öğrendiklerinizi pekiştirin.
✔ Gerçek dünya projeleri üzerinde çalışarak deneyim kazanın.
Bu bilgiler sayesinde hem teknik bilginizi güçlendirebilir hem de JavaScript mülakatlarında rakiplerinizden bir adım önde olabilirsiniz.