Çizimlerle JavaScript Çağrı Yığını Anlama
En basit ifadeyle, çağrı yığını, işlevlerin yürütme sırasını kontrol eden bir yığındır. İşte bu. Hangi fonksiyonun ne zaman yürütüleceğini kontrol eden mekanizmadır.
Yığın, LIFO - Son giren ilk çıkar şeklinde bir veri yapısıdır. Bu, çağrı yığınına girilen son işlevin ilk çalıştırılacak işlev olacağı anlamına gelir.
Bir işlev çağrı yığınının içine nasıl girer?
Kod değerlendirildiğinde, yerine getirilen her işlev — çağrı yığınına girer. Bir başka ilginç soru (daha da ilginç olanı), bir işlev çağrı yığınından ne zaman çıkar? bu, yalnızca kendisi tarafından tetiklenen (varsa) tüm işlev yürütme işlemleri tamamlandıktan ve içindeki tüm kod satırları değerlendirildikten sonra gerçekleşir.
Önemsiz Vaka
Bu durumda, her bir fonksiyonun içindeki kod satırları yürütüldüğünde tamamlandığını göreceğiz.
Daha İlginç Vaka
Bu durumda, başka bir fonksiyonun içinden bir fonksiyon çağırmamız olacak.
Bu durumda çağrı yığınında göreceğimiz şey şudur:
Bu örnekte 'yığın' terimini daha iyi anlayabiliriz. Bir fonksiyonun başka bir fonksiyon içinde çağrılması sayesinde, bu "kutuların" nasıl üst üste yığıldığını ve bir "kutu" yığını oluşturduğunu görebiliriz.
Her kutu, içindeki kodu yürütür. Bir işlev çağrısı varsa, içinde yeni bir 'kutu' oluşturulur. console.log gibi basit bir komut varsa, basitçe yürütülür. Tüm kodunu çalıştırdıktan sonra 'kutu' yığından ayrılır.
Bu 'kutular' Nedir?
Sorduğuna sevindim. Bu kutular, işlevin yürütme bağlamıdır. Her işlev çağrısı gerçekleştiğinde, yeni bir işlev yürütme bağlamı oluşturulur. Yürütme bağlamı, işlev içinde yapılan veya ona iletilen tüm üyeleri ve bildirimleri tutmaktan sorumludur.
Bunun bir örneği yukarıdaki animasyonda gösterilmiştir. İşlev, bu parametrenin yürütme bağlamında tutulduğu callingToWitnessbir parametre alır . witnessNumberBu işlevin birden çok kez yürütüldüğünü görebiliriz, ancak içeriği her seferinde farklıdır.
Neden Bu Yürütme Bağlamlarına İhtiyacımız Var?
Yürütme bağlamımızda bildirilmemiş bir üyeyi yazdırmaya çalışırsak ne olur? görelim:
Bu nedenle, ilk yürütme bağlamı Genel Yürütme Bağlamı'dır ve bildirilen işlevlerin dışındaki tüm kodu tutar. İçinde, her işlev yürütmesi için yürütme bağlamlarını göreceğiz. Yukarıdaki örnekte, callWitness işlevi yürütülürken, yürütme bağlamının yargıçAdı veya savcıAdı adlı bir üyeyi tutmadığını , ancak ata yürütme bağlamlarından birinin bu üyelere sahip olduğunu
görebiliriz . callWitness işlevinin yürütülmesini daha iyi anlayalım :
- whoAmI yazdırma : Bu parametre, işlevin yürütme kapsamında ve atasının yürütme bağlamlarının her birinde bildirilir. İşlev yürütme bağlamından okunacaktır. Her zaman üyenin bildirildiği en yakın yürütme bağlamını ararız, bu durumda açıkça bu, geçerli işlevin yürütme bağlamıdır.
- savcıAdı yazdırılıyor : Bu parametre, işlevin kendisinde bildirilmemiştir. Savcılık işlevinde bildirildiğini görebiliriz , bu, işlevimizi yürüten yürütme bağlamıdır ve bu nedenle işlevimiz üyelerini okuyabilir.
- YargıçAdı yazdırılıyor : Bu parametre de işlevin kendisinde bildirilmemiştir. Fonksiyonumuzun atalarından biri olan genel yürütme bağlamında ilan edildi, bu nedenle üyelerini okuyabilir.
Sağlanan örneklerin çağrı yığınını, yürütme sırasını ve o anda yürütülmekte olan kod için kullanılabilen parametreleri daha iyi anlamanıza yardımcı olduğunu umuyorum. Artık yürütme bağlamını ve kodun yürütülme sırasını anlamak için güçlü bir temele sahip olmalısınız.

![Bağlantılı Liste Nedir? [Bölüm 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































