1. Unutulmuş ‘this’ Bağlantıları
Örneğin, bir fonksiyonu `setTimeout` içinde çağırdığınızda, `this` bağlamı beklediğiniz gibi çalışmaz ve belirsiz bir değeri döndürebilir.
Çözüm: ES6'daki ok fonksiyonları (`=>`) kullanarak `this`'i doğru şekilde bağlayabilirsiniz. Bu sayede, `this`'in bağlamını kaybetmeden işlevsel kodlar yazabilirsiniz.
```javascript
setTimeout(() => {
console.log(this);
}, 1000);
```
2. Asenkron Kodun Yanıltıcı Davranışları
Çözüm: Asenkron işleyişi daha iyi anlamak için, işlem sırasını doğru belirlemek çok önemlidir. Kodunuzun sıralamasını netleştirerek ve `async/await` kullanarak, sırasıyla işlem yapabilirsiniz.
```javascript
async function fetchData() {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
console.log(data);
}
```
3. Array Mutation Sorunları
Örneğin, diziyi doğrudan değiştirirken başka bir fonksiyonun da aynı diziye erişimi varsa, veri tutarsızlıkları meydana gelebilir.
Çözüm: Dizileri mutasyona uğratmamak adına, immutability (değiştirilemezlik) ilkesine sadık kalmak faydalıdır. Bunun için `slice()`, `concat()` gibi fonksiyonlar kullanılabilir.
```javascript
let arr = [1, 2, 3];
let newArr = arr.concat(4); // Eski dizi değişmez
console.log(arr); // [1, 2, 3]
console.log(newArr); // [1, 2, 3, 4]
```
4. Event Loop ve Call Stack Karmaşası
Çözüm: Event Loop'u ve Call Stack'i anlamak için, işlemleri sırasıyla takip edin. `console.log` ile adım adım kodun nasıl çalıştığını izleyebilir ve buna göre hatalarınızı düzeltebilirsiniz.
```javascript
console.log("Start");
setTimeout(() => {
console.log("Inside setTimeout");
}, 0);
console.log("End");
```
5. Kapanmamış Promise’ler
Çözüm: Her zaman `catch` bloğu kullanarak Promise'lerinizi doğru şekilde ele alın. Bu, hataları kontrol etmenin yanı sıra kodunuzu daha güvenilir hale getirir.
```javascript
fetch('https://api.example.com/data')
.then(response => response.json())
.catch(error => console.error('Hata:', error));
```
6. Yavaş DOM Manipülasyonu
Çözüm: DOM manipülasyonlarını gruplandırarak veya sanal DOM kullanarak hızınızı artırabilirsiniz. `requestAnimationFrame` gibi yöntemler, animasyonlar için ideal bir çözüm sunar.
```javascript
requestAnimationFrame(() => {
// DOM manipülasyonu burada yapılır
});
```
7. ‘NaN’ ve ‘undefined’ Sorunları
Çözüm: Her zaman sayısal işlemler öncesinde tür kontrolü yaparak `NaN` değerlerinin önüne geçebilirsiniz. `isNaN()` fonksiyonu bunun için çok kullanışlıdır.
```javascript
let value = "abc";
if (isNaN(value)) {
console.log("Geçersiz sayı");
}
```