Created
December 22, 2024 09:47
-
-
Save cemtopkaya/e1a7473e784fb949d4d4740bbba4caa9 to your computer and use it in GitHub Desktop.
Javascript ve nodejs soruları
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Soru:
Aşağıdaki kod parçacığını inceleyin ve ilgili soruları cevaplayın:
Sorular:
startArrow
,startRegular
, vestartWithSelf
fonksiyonları arasındaki farklar nelerdir? Çıktılar nasıl olur?this
bağlamıstartRegular
fonksiyonunda neden beklenildiği gibi çalışmaz? Bunun çözümü içinbind
yöntemini nasıl kullanabilirsiniz?self
değişkeni hangi durumda gerekli olur ve neden işe yarar? JavaScript'inthis
bağlamı ileself
arasındaki farkı açıklayın.startWithSelf
fonksiyonunuself
kullanmadan, modern ES6+ yöntemlerini kullanarak yeniden yazabilir misiniz?Beklenen Cevaplar:
1. Çıktı Analizi:
Kod çalıştırıldığında aşağıdaki çıktılar oluşacaktır:
startArrow
: Arrow fonksiyonuthis
bağlamını lexical (tanımlandığı yerin bağlamı) olarak kullanır. Yani,this
buradaTimer
nesnesini işaret eder veseconds
artışını doğru şekilde yapar. Örnek çıktı:startRegular
: Klasik fonksiyonthis
bağlamını runtime'da belirler. BuradasetInterval
global bir fonksiyon olduğu içinthis
undefined
(strict mode) veyawindow
(non-strict mode) olur. Dolayısıylathis.seconds
artırılamaz ve hata alabilirsiniz. Örnek çıktı:startWithSelf
:self
değişkeni dıştaki fonksiyonunthis
bağlamını tutar ve içeride erişilebilir hale getirir. Bu,Timer
nesnesininseconds
değerini artırmayı sağlar. Örnek çıktı:2.
this
Bağlamı vestartRegular
:startRegular
fonksiyonundakithis
sorunubind
kullanılarak çözülebilir:Bu çözümde
bind(this)
ifadesi,setInterval
'in callback'ininthis
bağlamınıTimer
nesnesine sabitler.3.
self
Kullanımının Gerekliliği:self
değişkeni, ES6 öncesi dönemdethis
bağlamının kaybolmasını önlemek için yaygın bir çözümdü. ES6+ ile arrow fonksiyonlar bu ihtiyacı büyük ölçüde ortadan kaldırdı. Ancak, arrow fonksiyon kullanılamadığı durumlarda (örneğin, eski tarayıcı desteği gerekirse)self
hâlâ geçerli bir çözümdür.4. Modern ES6+ ile Yeniden Yazım:
startWithSelf
fonksiyonu modern bir arrow fonksiyon ile şu şekilde yeniden yazılabilir:Bu yöntem hem okunabilirliği artırır hem de
this
bağlamını doğru şekilde işler.Görüşme Yapan İçin Değerlendirme:
Adayın bu soruyu yanıtlarken şu konulara hakimiyetini değerlendiriniz:
this
bağlamını anlaması ve farklı bağlamlarda nasıl değiştiğini açıklayabilmesi.self
gibi eski yöntemlerin ne zaman gerekli olduğunu ve modern alternatiflerini açıklayabilmesi.