JavaScript Dersleri

JavaScript’te this ve Arrow Function

eminbasbayan

eminbasbayan

3 dk okuma
JavaScript’te this ve Arrow Function
🔍 Büyütmek için tıklayın

JavaScript, güçlü ve esnek bir programlama dili olsa da bazı konuları ilk başta anlamak zor olabilir. Bu konulardan biri de this anahtar kelimesinin davranışıdır. Özellikle arrow function (ok fonksiyonları) ile birlikte kullanıldığında, this’in nasıl çalıştığını anlamak birçok geliştirici için kafa karıştırıcı olabilir. Ancak, konuyu doğru örneklerle ve sade bir dille ele alırsak, bu karışıklığın yerini net bir anlayışa bırakması mümkündür. Bu makalede, sadece this ile arrow function arasındaki ilişkiyi detaylı ve açıklayıcı şekilde inceleyeceğiz.

this Nedir?

this, JavaScript'te bir fonksiyonun hangi nesne bağlamında çalıştığını belirtmek için kullanılan özel bir kelimedir. Fonksiyonlar çalıştırıldığında this dinamik olarak değişebilir. Yani this’in değeri, fonksiyonun nerede tanımlandığından değil, nasıl çağrıldığından etkilenir.

Basit bir örnekle açıklayalım:

const ogrenci = { ad: "Mehmet", selamla: function () { console.log("Merhaba, ben " + this.ad); } }; ogrenci.selamla(); // Merhaba, ben Mehmet

Burada this.ad, ogrenci.ad anlamına gelir. Çünkü selamla fonksiyonu ogrenci üzerinden çağrılmıştır.

Arrow Function ile this Farklı Çalışır

Arrow function'ların en büyük farklarından biri, this değerini kendi bağlamından değil, tanımlandığı dış çevreden almasıdır. Bu özelliği nedeniyle bazı durumlarda işleri kolaylaştırırken, bazı durumlarda da hata kaynağı olabilir.

Aşağıdaki örnekte bu fark net bir şekilde görülebilir:

const kitap = { baslik: "Sinekli Bakkal", yazdir: () => { console.log(this.baslik); } }; kitap.yazdir(); // undefined

Burada this, kitap nesnesini göstermez. Çünkü arrow function, this değerini tanımlandığı yerden yani global alandan alır. Global alanda baslik adında bir özellik olmadığı için sonuç undefined olur.

Doğru Kullanım: Nesne Metotlarında Normal Fonksiyon

Bir nesneye ait metodun içinde this kullanmak istiyorsak, arrow function kullanmamalıyız. Bunun yerine klasik fonksiyon ifadesi tercih edilmelidir.

const kitap = { baslik: "Saatleri Ayarlama Enstitüsü", yazdir: function () { console.log(this.baslik); } }; kitap.yazdir(); // Saatleri Ayarlama Enstitüsü

Bu kullanımda this, doğru şekilde kitap nesnesini temsil eder.

Zamanlayıcı Fonksiyonlarda (setTimeout) Arrow Function Avantajı

Bazı özel durumlarda arrow function kullanmak işleri kolaylaştırır. Örneğin setTimeout gibi zaman gecikmesi içeren işlemlerde this bağlamı değişir ve bu da istenmeyen sonuçlara yol açabilir.

Aşağıdaki örneği inceleyelim:

const oyuncu = { isim: "Ayşe", tanit: function () { setTimeout(function () { console.log("Oyuncu: " + this.isim); }, 2000); } }; oyuncu.tanit(); // 2 saniye sonra: Oyuncu: undefined

Burada this, setTimeout fonksiyonunun içindeki global bağlamı gösterdiği için this.isim undefined olur.

Aynı örneği arrow function ile yazarsak:

const oyuncu = { isim: "Ayşe", tanit: function () { setTimeout(() => { console.log("Oyuncu: " + this.isim); }, 2000); } }; oyuncu.tanit(); // 2 saniye sonra: Oyuncu: Ayşe

Bu sefer this, dıştaki tanit fonksiyonundan devralındığı için doğru şekilde oyuncu nesnesini gösterir.

Özet: Arrow Function ve this Hakkında Bilmen Gerekenler

ÖzellikNormal FonksiyonArrow Function
this Nereden Gelir?Çağrıldığı yere göreTanımlandığı yere göre
Nesne Metodu Olarak Kullanılır mı?EvetGenellikle hayır
Zamanlayıcılarda (setTimeout) this Sorununu Çözer mi?HayırEvet

Sonuç

JavaScript'te this kelimesi çoğu zaman anlaşılması zor bir yapı gibi görünse de, arrow function'lar ile nasıl farklı çalıştığını anladığınızda birçok hatayı önceden görebilirsiniz. Kural basittir: Arrow function, this değerini bulunduğu ortamdan alır. Bu yüzden nesne metodları için uygun değildir ama zaman gecikmesi gibi durumlarda çok işe yarar.

Konunun özü şu: Arrow function’lar this konusunda özel bir davranış sergiler. Nerede kullanılacağını iyi bilmek, kodunuzun sorunsuz çalışmasını sağlar.

Etiketler

#Eğitimler#JavaScript Dersleri

İlgili Yazılar

Bu konuyla ilgili diğer yazılarımızı da inceleyebilirsiniz

Web Geliştirmede Neden JavaScript'e İhtiyacımız Var?
JavaScript Dersleri

Web Geliştirmede Neden JavaScript'e İhtiyacımız Var?

Web geliştirme, temel olarak üç ana yapı taşı üzerine kuruludur: **HTML, CSS ve JavaScript**. Bu üçlüden **HTML**, sayfanın iskeletini oluşturur, **CSS**, tasarımı ve görsel düzenlemeleri yapar

2 dk
JavaScript'e Giriş: JavaScript Nedir?
JavaScript Dersleri

JavaScript'e Giriş: JavaScript Nedir?

Web geliştirme yolculuğunuzda büyük bir adım atıyorsunuz! HTML ve CSS ile statik web sayfaları oluşturmayı öğrendiniz, ancak şimdi JavaScript ile sayfanıza hareket ve etkileşim katmanını eklemeye hazırsınız. JavaScript, web sayfalarını dinamik hale getiren ve kullanıcı etkileşimlerini yöneten

3 dk
JavaScript Değişkenler (Variables) Nedir?
JavaScript Dersleri

JavaScript Değişkenler (Variables) Nedir?

JavaScript, web geliştirme dünyasının en önemli dillerinden biridir. Dinamik web siteleri, interaktif uygulamalar, oyunlar ve animasyonlar gibi birçok alanda kullanılır. Ancak, bu tür gelişmiş uygulamalar oluşturabilmek için önce JavaScript'in temellerini anlamak gerekir. Bu

4 dk
JavaScript İlkel (Primitive) Veri Tipleri
JavaScript Dersleri

JavaScript İlkel (Primitive) Veri Tipleri

JavaScript, modern web geliştirmede vazgeçilmez bir programlama dilidir. Web sitelerini daha dinamik hale getirmek, etkileşim eklemek ve hatta oyunlar ve uygulamalar geliştirmek için kullanılır. Ancak, bu eğlenceli ve güçlü özelliklere ulaşmadan önce, JavaScript'in temellerin

4 dk
JavaScript'te Sayılar ve Matematiksel Operatörler
JavaScript Dersleri

JavaScript'te Sayılar ve Matematiksel Operatörler

JavaScript, modern web geliştirmede en yaygın kullanılan programlama dillerinden biridir. Bu dilde çalışırken sayılarla sıkça işlem yaparız. İster bir hesap makinesi uygulaması geliştiriyor olun, ister bir oyundaki puan sistemini kodluyor olun, sayılar kaçınılmaz bir parçadır. JavaScri

4 dk
JavaScript'te Boolean Veri Tipi
JavaScript Dersleri

JavaScript'te Boolean Veri Tipi

JavaScript'ı öğrenmeye yeni başlayanlar için veri tipleri oldukça önemlidir. Bu yazıda, en temel veri tiplerinden biri olan **Boolean (mantıksal) değerleri** inceleyeceğiz. Boolean değerleri, programlamada sıklıkla kullanılan ve kodlarımızın man

3 dk