JAVASCRIPT EĞİTİMİ
JavaScript eğitimi, dili tarayıcı dili olmaktan çıkartıp modern özellikleriyle kullanmak isteyen mühendisleri yetiştirir. ES2015+ özellikleri (arrow, destructuring, spread, optional chaining); Promise ve async/await ile asenkron akış; event loop, microtask ve macrotask queue sezgisel olarak işlenir.
Program sonunda katılımcı, closure ve hoisting'i tartışılır biçimde anlatır; ESM ve CommonJS interop ile module sistemini yönetir; DOM manipulation ve event delegation ile UI yazar. Type'lı düşünceye geçiş — TypeScript'e doğal zemin hazırlamak — eğitimin kapanış adımıdır.
Katılımcı Profili
Bu eğitim, JavaScript'i tarayıcı dili olmaktan çıkartıp modern dil özellikleriyle kullanmak isteyen rollere yöneliktir:
- Yeni Başlayan Geliştiriciler: JavaScript'i temelden öğrenmek isteyenler
- Frontend Geliştiriciler: Modern ES2015+ özelliklerini idiomatik kullanan ekipler
- Node.js Geliştiricileri: Backend tarafında JavaScript yazan roller
- Full-stack Mühendisleri: JS'i hem frontend hem backend'de kullanan ekipler
- TypeScript Adayları: JS temelini sağlamlaştırıp TS'e geçen geliştiriciler
Ön Gereklilikler
Bu eğitime katılım için aşağıdaki ön bilgiler önerilir:
- Herhangi bir dilde temel programlama (variable, loop, function) deneyimi
- HTML ve CSS ile temel arayüz geliştirme rahatlığı
- Tarayıcı dev tools (Chrome DevTools) ile temel tanışıklık
- Git ile sürüm kontrol akışı bilgisi
- VS Code veya benzer bir editör kullanım deneyimi
Süresi ve Tarihi
Süre: 3 gün. Bu süre standart program içindir; ek modüllere ve hedefe göre süre özelleştirilebilir.
Eğitim tarihleri ve saatleri, ekibinizin uygunluğuna göre birlikte planlanır.
Kazanımlar
Eğitimi tamamlayan katılımcı, JavaScript'i tarayıcı dili olmaktan çıkartıp modern dil özellikleriyle kullanır:
- ES2015+ özelliklerini (arrow, destructuring, spread, optional chaining) idiomatik kullanır
- Promise ve async/await ile asenkron akış kurar
- Event loop, microtask ve macrotask queue'yu sezgisel açıklar
- Closure ve hoisting'i tartışılır biçimde anlatır
- Module sistemini ESM ve CommonJS interop ile yönetir
- DOM manipulation ve event delegation ile UI yazar
- Type'lı düşünceye geçer — TypeScript'e doğal zemin hazırlar
JavaScript Eğitimi Konuları
1. JavaScript ve ECMAScript Standartları
- JavaScript, ECMAScript, JS engine ilişkisi
- V8, SpiderMonkey, JavaScriptCore engine'ler
- TC39 ve yıllık sürüm akışı
- Strict mode ve modern modül davranışı
- Resmi kaynak: ECMAScript şartnamesi
2. Var, Let, Const ve Scope
- var function scope ve hoisting
- let, const block scope
- TDZ (Temporal Dead Zone)
- Reassignment vs mutation ayrımı
3. Hoisting ve Temporal Dead Zone
- Function declaration hoisting
- Var hoisting ve undefined davranışı
- Let/const ile TDZ hatası
- Class declaration hoisting
4. Function, Arrow Function, Method
- Function declaration vs expression
- Arrow function ve lexical this
- Method shorthand syntax
- Default parameter ve rest parameter
- IIFE (Immediately Invoked Function)
5. This Keyword ve Binding
- this davranışının dinamikliği
- Implicit, explicit, new, default binding
- call, apply, bind metotları
- Arrow function this farkı
6. Prototype ve Prototypal Inheritance
- __proto__ ve prototype zinciri
- Object.create ile prototype kurma
- hasOwnProperty ve in operator
- Object.getPrototypeOf, setPrototypeOf
7. ES6 Class ve Inheritance
- class söz dizimi: constructor, method
- extends ve super keyword
- static method ve getter/setter
- Private field (#) ve method
- Class fields ve initializer
8. Closure ve Lexical Scope
- Closure tanımı ve örnek senaryolar
- Module pattern closure ile
- Loop closure tuzağı (var ile)
- Memory leak riski
9. Array Methods - map, filter, reduce
- map, filter, reduce, find, some, every
- flat, flatMap ile nested array
- Array.from ve Array.of
- Spread operator ile array kopyalama
- Mutating vs non-mutating method farkı
10. Async - Callback, Promise, async/await
- Callback hell ve pyramid of doom
- Promise: pending, fulfilled, rejected
- Promise.all, Promise.race, Promise.allSettled
- async/await syntactic sugar
- Try-catch ile async hata yakalama
11. Event Loop ve Microtask Queue
- Single-threaded JS ve event loop
- Call stack, task queue, microtask queue
- setTimeout, setInterval, requestAnimationFrame
- Promise microtask önceliği
- Render adımı ve frame budget
12. Modules - ES Modules vs CommonJS
- ES Modules: import/export
- CommonJS: require/module.exports
- Static vs dynamic import
- Tree shaking ve dead code elimination
13. Destructuring, Spread ve Rest
- Object ve array destructuring
- Default değer ve rename
- Spread (...) ile clone ve merge
- Rest parameter ile fonksiyon imzası
14. Optional Chaining ve Nullish Coalescing
- ?. ile güvenli property erişimi
- ?? ile nullish coalescing
- ?. vs && farkı
- ?? vs || ayrımı (falsy değerler)
15. Error Handling
- Error, TypeError, ReferenceError, RangeError
- try-catch-finally ve throw
- Custom error sınıfı tasarımı
- Async error handling pattern
16. JSON ve Fetch API
- JSON.parse, JSON.stringify
- Fetch API: Request, Response
- AbortController ile cancellation
- Streams API ve ReadableStream
17. DOM Manipulation ve Event
- querySelector, querySelectorAll
- addEventListener ve event bubbling
- Event delegation pattern
- preventDefault ve stopPropagation
- Custom event ve CustomEvent
18. Modern JS - Iterator, Generator, Symbol
- Iterator protokolü ve for...of
- Generator function ve yield
- Symbol ve unique key
- WeakMap ve WeakSet
- Proxy ve Reflect API
JAVASCRIPT EĞİTİMİ ile İlgili
Sıkça Sorulan Sorular ve Cevapları
var, let ve const arasındaki fark nedir?
var fonksiyon-scope ve hoisting ile başlatılır — modern kodda kaçınılır. let block-scope ve TDZ (Temporal Dead Zone) ile değişken durumunu netleştirir. const reference immutable; ama object/array içeriği değişebilir. Modern JS const default, mutation gerekiyorsa let, var legacy.
Event loop, microtask ve macrotask sırası nasıl çalışır?
Call stack boşalınca microtask queue (Promise.then, queueMicrotask) tamamen tüketilir, sonra macrotask (setTimeout, I/O callback) bir tane alınır. Yani Promise.resolve().then() setTimeout(fn, 0)'dan önce çalışır. Bu sıra UI rendering ve performance optimization için kritik.
Closure neye yarar ve hangi tuzakları taşır?
Closure inner function'ın outer function'ın değişkenlerine erişimini korur — module pattern, private state, partial application için güçlü. Tuzak: loop içinde var ile closure oluşturmak (i son değeri yakalar — let ile çözülür). Memory leak için tutulan reference'a dikkat etmek gerekir.
ESM ile CommonJS interop neden karmaşık?
ESM asenkron, top-level await desteği ile statik. CommonJS senkron, require() ile dinamik. Node.js .mjs ve type:'module' ile ESM'i destekler ama interop koşulları (default export, __dirname yok) farkındalık ister. Modern paketler dual package (her ikisini birden) yayınlamayı standart yapmaya çalışıyor.
Promise ile async/await arasında ne zaman hangisi?
async/await tek başına linear flow için daha okunur. Promise.all ve Promise.race gibi paralel composition için doğrudan Promise API daha uygun. İkisi birlikte kullanılır: paralel başlatma Promise.all, sonra await ile sonuç birleştirme. Try/catch async fonksiyonda exception yönetimini sade tutar.
Type-safe JavaScript için TypeScript veya JSDoc arasında karar?
TypeScript ayrı bir compilation step, full type system, IDE desteği güçlü — yeni projeler için varsayılan. JSDoc tipleri yorum olarak yazılır, mevcut JS'i compile etmeden tip kontrolü sağlar — küçük library veya legacy projede pragmatik. VSCode her ikisini de native destekler.



