{"id":40954,"date":"2026-03-02T14:00:45","date_gmt":"2026-03-02T11:00:45","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis\/"},"modified":"2026-03-02T14:00:45","modified_gmt":"2026-03-02T11:00:45","slug":"javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis\/","title":{"rendered":"JavaScript Nas\u0131l \u00c7al\u0131\u015f\u0131r? B\u00f6l\u00fcm 2: Y\u00fcr\u00fctme Ba\u011flam\u0131 ve \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131na Derin Bir Bak\u0131\u015f"},"content":{"rendered":"<h2>JavaScript Nas\u0131l \u00c7al\u0131\u015f\u0131r? B\u00f6l\u00fcm 2: Y\u00fcr\u00fctme Ba\u011flam\u0131 ve \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131na Derin Bir Bak\u0131\u015f<\/h2>\n<p>JavaScript&#8217;in b\u00fcy\u00fcleyici d\u00fcnyas\u0131nda derinlere inmeye haz\u0131r m\u0131s\u0131n\u0131z? Bu makale serimizin ikinci b\u00f6l\u00fcm\u00fcnde, JavaScript kodunuzun sahne arkas\u0131nda nas\u0131l i\u015fledi\u011fini anlamak i\u00e7in iki temel yap\u0131 ta\u015f\u0131n\u0131 inceleyece\u011fiz: Y\u00fcr\u00fctme Ba\u011flam\u0131 (Execution Context) ve \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131 (Call Stack). Bu kavramlar, de\u011fi\u015fkenlerin nas\u0131l eri\u015filebilir oldu\u011funu, fonksiyonlar\u0131n nas\u0131l \u00e7a\u011fr\u0131ld\u0131\u011f\u0131n\u0131 ve kodunuzun hangi s\u0131rayla \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 belirler. JavaScript&#8217;in bu temel mekanizmalar\u0131n\u0131 kavrad\u0131\u011f\u0131n\u0131zda, daha temiz, daha verimli ve hatas\u0131z kod yazma yetene\u011finiz \u00f6nemli \u00f6l\u00e7\u00fcde geli\u015fecektir. Gelin, bu karma\u015f\u0131k g\u00f6r\u00fcnen ama asl\u0131nda olduk\u00e7a mant\u0131kl\u0131 yap\u0131lar\u0131 basit bir dille a\u00e7\u0131klayal\u0131m.<\/p>\n<h3>Y\u00fcr\u00fctme Ba\u011flam\u0131 (Execution Context) Nedir?<\/h3>\n<p>JavaScript motoru bir kod par\u00e7as\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131nda, o kod i\u00e7in \u00f6zel bir ortam olu\u015fturur. Bu ortama &#8220;Y\u00fcr\u00fctme Ba\u011flam\u0131&#8221; denir. Her fonksiyon \u00e7a\u011fr\u0131s\u0131, her mod\u00fcl ve hatta global kapsam bile kendi y\u00fcr\u00fctme ba\u011flam\u0131na sahiptir. Bu ba\u011flam, kodun \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 i\u00e7in gerekli t\u00fcm bilgileri (de\u011fi\u015fkenler, fonksiyonlar, <code>this<\/code> anahtar kelimesinin de\u011feri gibi) bar\u0131nd\u0131ran soyut bir yap\u0131d\u0131r. JavaScript tek i\u015f par\u00e7ac\u0131kl\u0131 (single-threaded) bir dil oldu\u011fu i\u00e7in, ayn\u0131 anda yaln\u0131zca bir y\u00fcr\u00fctme ba\u011flam\u0131 aktif olabilir.<\/p>\n<h4>Tan\u0131m ve \u00d6nemi<\/h4>\n<p>Y\u00fcr\u00fctme ba\u011flam\u0131, JavaScript kodunun \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131 sanal bir kapsay\u0131c\u0131 veya &#8220;\u00e7al\u0131\u015fma alan\u0131&#8221; olarak d\u00fc\u015f\u00fcn\u00fclebilir. Her y\u00fcr\u00fctme ba\u011flam\u0131 iki ana a\u015famadan ge\u00e7er:<\/p>\n<p>1.  <strong>Olu\u015fturma A\u015famas\u0131 (Creation Phase):<\/strong> Bu a\u015famada, motor kodu tarar ve de\u011fi\u015fkenler ile fonksiyon bildirimleri i\u00e7in haf\u0131zada yer ay\u0131r\u0131r (hoisting). Ayr\u0131ca <code>this<\/code> anahtar kelimesinin de\u011ferini belirler ve Lexical Ortam\u0131 ile De\u011fi\u015fken Ortam\u0131n\u0131 olu\u015fturur.<br \/>\n2.  <strong>Y\u00fcr\u00fctme A\u015famas\u0131 (Execution Phase):<\/strong> Bu a\u015famada ise kod sat\u0131r sat\u0131r \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r, de\u011fi\u015fkenlere de\u011ferler atan\u0131r ve fonksiyonlar \u00e7a\u011fr\u0131l\u0131r.<\/p>\n<p>Y\u00fcr\u00fctme ba\u011flam\u0131n\u0131 anlamak, de\u011fi\u015fkenlerin kapsam\u0131n\u0131 (scope), <code>this<\/code> anahtar kelimesinin davran\u0131\u015f\u0131n\u0131 ve hata ay\u0131klama s\u00fcre\u00e7lerini kavramak i\u00e7in hayati \u00f6neme sahiptir.<\/p>\n<h4>Y\u00fcr\u00fctme Ba\u011flam\u0131 T\u00fcrleri<\/h4>\n<p>JavaScript&#8217;te \u00fc\u00e7 ana y\u00fcr\u00fctme ba\u011flam\u0131 t\u00fcr\u00fc bulunur:<\/p>\n<p>1.  <strong>Global Y\u00fcr\u00fctme Ba\u011flam\u0131 (Global Execution Context &#8211; GEC):<\/strong><br \/>\n    *   Bir JavaScript dosyas\u0131 ilk y\u00fcklendi\u011finde veya bir taray\u0131c\u0131 sekmesi a\u00e7\u0131ld\u0131\u011f\u0131nda olu\u015fan ilk ba\u011flamd\u0131r.<br \/>\n    *   T\u00fcm global de\u011fi\u015fkenler ve fonksiyonlar burada tan\u0131mlan\u0131r.<br \/>\n    *   Taray\u0131c\u0131 ortam\u0131nda <code>window<\/code> nesnesini, Node.js ortam\u0131nda ise <code>global<\/code> nesnesini <code>this<\/code> olarak ba\u011flar.<br \/>\n    *   Her zaman yaln\u0131zca bir global y\u00fcr\u00fctme ba\u011flam\u0131 vard\u0131r.<br \/>\n2.  <strong>Fonksiyon Y\u00fcr\u00fctme Ba\u011flam\u0131 (Function Execution Context &#8211; FEC):<\/strong><br \/>\n    *   Bir fonksiyon her \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda yeni bir fonksiyon y\u00fcr\u00fctme ba\u011flam\u0131 olu\u015fturulur.<br \/>\n    *   Her fonksiyonun kendi de\u011fi\u015fken ortam\u0131, lexical ortam\u0131 ve <code>this<\/code> ba\u011flam\u0131 vard\u0131r.<br \/>\n    *   Fonksiyon \u00e7al\u0131\u015fmas\u0131 bitti\u011finde, bu ba\u011flam \u00e7a\u011fr\u0131 y\u0131\u011f\u0131n\u0131ndan kald\u0131r\u0131l\u0131r.<br \/>\n3.  <strong>Eval Y\u00fcr\u00fctme Ba\u011flam\u0131 (Eval Execution Context):<\/strong><br \/>\n    *   <code>eval()<\/code> fonksiyonu kullan\u0131larak \u00e7al\u0131\u015ft\u0131r\u0131lan kod i\u00e7in olu\u015fturulur.<br \/>\n    *   Kullan\u0131m\u0131 genellikle \u00f6nerilmez \u00e7\u00fcnk\u00fc g\u00fcvenlik a\u00e7\u0131klar\u0131 olu\u015fturabilir ve performans\u0131 d\u00fc\u015f\u00fcrebilir.<\/p>\n<h4>Y\u00fcr\u00fctme Ba\u011flam\u0131n\u0131n Bile\u015fenleri<\/h4>\n<p>Her y\u00fcr\u00fctme ba\u011flam\u0131, i\u00e7indeki kodun nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 belirleyen \u00fc\u00e7 ana bile\u015fene sahiptir:<\/p>\n<p>1.  <strong>De\u011fi\u015fken Ortam\u0131 (Variable Environment):<\/strong><br \/>\n    *   Bu, <code>var<\/code> ile tan\u0131mlanm\u0131\u015f de\u011fi\u015fkenleri ve fonksiyon bildirimlerini i\u00e7erir.<br \/>\n    *   Olu\u015fturma a\u015famas\u0131nda, bu de\u011fi\u015fkenler <code>undefined<\/code> olarak ba\u015flat\u0131l\u0131r ve fonksiyon bildirimleri tamamen haf\u0131zaya al\u0131n\u0131r (hoisting).<br \/>\n2.  <strong>Lexical Ortam (Lexical Environment):<\/strong><br \/>\n    *   Bu, de\u011fi\u015fkenlerin ve fonksiyonlar\u0131n tan\u0131mland\u0131\u011f\u0131 fiziksel konuma g\u00f6re kapsamlar\u0131n\u0131 belirler.<br \/>\n    *   <code>let<\/code> ve <code>const<\/code> ile tan\u0131mlanm\u0131\u015f de\u011fi\u015fkenler burada tutulur. <code>var<\/code> de\u011fi\u015fkenleri de burada bulunur ancak davran\u0131\u015flar\u0131 De\u011fi\u015fken Ortam\u0131ndaki <code>var<\/code>&#8216;dan farkl\u0131d\u0131r (hoisting).<br \/>\n    *   Bir d\u0131\u015f Lexical Ortama (outer lexical environment) referans i\u00e7erir, bu da kapsam zincirini (scope chain) olu\u015fturur.<br \/>\n3.  <strong><code>this<\/code> Ba\u011flam\u0131 (This Binding):<\/strong><br \/>\n    *   <code>this<\/code> anahtar kelimesinin de\u011ferini belirler. Bu de\u011fer, fonksiyonun nas\u0131l \u00e7a\u011fr\u0131ld\u0131\u011f\u0131na ba\u011fl\u0131 olarak de\u011fi\u015fir.<\/p>\n<h3>Y\u00fcr\u00fctme Ba\u011flam\u0131n\u0131n Bile\u015fenleri Detayl\u0131 \u0130ncelendi<\/h3>\n<p>Y\u00fcr\u00fctme ba\u011flam\u0131n\u0131n \u00fc\u00e7 temel bile\u015fenini daha yak\u0131ndan inceleyelim. Bu bile\u015fenler, JavaScript&#8217;in dinamik do\u011fas\u0131n\u0131 anlamak i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h4>De\u011fi\u015fken Ortam\u0131 (Variable Environment)<\/h4>\n<p>De\u011fi\u015fken Ortam\u0131, bir y\u00fcr\u00fctme ba\u011flam\u0131n\u0131n olu\u015fturma a\u015famas\u0131nda ilk olarak doldurulan k\u0131s\u0131md\u0131r. Temel olarak, <code>var<\/code> anahtar kelimesiyle tan\u0131mlanm\u0131\u015f t\u00fcm de\u011fi\u015fkenleri ve <code>function<\/code> anahtar kelimesiyle tan\u0131mlanm\u0131\u015f t\u00fcm fonksiyon bildirimlerini bar\u0131nd\u0131r\u0131r. Bu bile\u015fenin en dikkat \u00e7ekici \u00f6zelli\u011fi, &#8220;hoisting&#8221; (yukar\u0131 \u00e7ekme) mekanizmas\u0131n\u0131 desteklemesidir.<\/p>\n<p>*   <strong>Hoisting:<\/strong> JavaScript motoru kodu \u00e7al\u0131\u015ft\u0131rmadan \u00f6nce, t\u00fcm <code>var<\/code> de\u011fi\u015fken bildirimlerini ve fonksiyon bildirimlerini mevcut kapsam\u0131n en \u00fcst\u00fcne ta\u015f\u0131r. <code>var<\/code> de\u011fi\u015fkenleri <code>undefined<\/code> de\u011feriyle ba\u015flat\u0131l\u0131rken, fonksiyon bildirimleri tamamen haf\u0131zaya al\u0131n\u0131r ve do\u011frudan \u00e7a\u011fr\u0131labilir hale gelir.<\/p>\n<pre><code class=\"language-javascript\">console.log(a); \/\/ undefined (hoisted, ama de\u011feri atanmad\u0131)\nvar a = 10;\nconsole.log(a); \/\/ 10\n\nselamVer(); \/\/ Merhaba D\u00fcnya!\nfunction selamVer() {\n  console.log(\"Merhaba D\u00fcnya!\");\n}\n\/\/ merhaba(); \/\/ Hata: merhaba is not a function (fonksiyon ifadesi hoisted olmaz)\nvar merhaba = function() {\n  console.log(\"Merhaba\");\n};<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, <code>a<\/code> de\u011fi\u015fkeni tan\u0131mlanmadan \u00f6nce eri\u015filebilmi\u015f, ancak <code>undefined<\/code> de\u011feriyle. <code>selamVer<\/code> fonksiyonu ise tan\u0131mlanmadan \u00f6nce bile \u00e7a\u011fr\u0131labilmi\u015ftir. Bu, De\u011fi\u015fken Ortam\u0131n\u0131n olu\u015fturma a\u015famas\u0131ndaki rol\u00fcn\u00fc g\u00f6sterir.<\/p>\n<h4>Lexical Ortam (Lexical Environment)<\/h4>\n<p>Lexical Ortam, bir y\u00fcr\u00fctme ba\u011flam\u0131n\u0131n di\u011fer \u00f6nemli bile\u015fenidir ve de\u011fi\u015fkenlerin ve fonksiyonlar\u0131n fiziksel olarak kodda nerede yaz\u0131ld\u0131\u011f\u0131na g\u00f6re kapsamlar\u0131n\u0131 (scope) belirler. Bu, \u00f6zellikle <code>let<\/code> ve <code>const<\/code> anahtar kelimeleriyle tan\u0131mlanan de\u011fi\u015fkenler i\u00e7in ge\u00e7erlidir ve blok kapsam\u0131 (block scope) kavram\u0131n\u0131 getirir.<\/p>\n<p>*   <strong>Kapsam Zinciri (Scope Chain):<\/strong> Her Lexical Ortam, kendisini \u00e7evreleyen (d\u0131\u015f) Lexical Ortama bir referans i\u00e7erir. Bu referanslar zinciri, bir de\u011fi\u015fkenin veya fonksiyonun belirli bir kapsamda bulunamad\u0131\u011f\u0131nda, JavaScript motorunun d\u0131\u015f kapsamlara do\u011fru arama yapmas\u0131n\u0131 sa\u011flar. Bu zincir, global Lexical Ortama kadar devam eder.<br \/>\n*   <strong><code>let<\/code> ve <code>const<\/code>:<\/strong> Bu anahtar kelimelerle tan\u0131mlanan de\u011fi\u015fkenler, <code>var<\/code> gibi hoisting'e u\u011framazlar ve tan\u0131mland\u0131klar\u0131 blok i\u00e7inde ge\u00e7erlidirler. Tan\u0131mlanmadan \u00f6nce eri\u015filmeye \u00e7al\u0131\u015f\u0131ld\u0131\u011f\u0131nda \"Temporal Dead Zone (TDZ)\" hatas\u0131 verirler.<\/p>\n<pre><code class=\"language-javascript\">let globalDegisken = \"Ben globalim\";\n\nfunction disFonksiyon() {\n  let disDegisken = \"Ben d\u0131\u015f fonksiyonum\";\n\n  function icFonksiyon() {\n    let icDegisken = \"Ben i\u00e7 fonksiyonum\";\n    console.log(icDegisken); \/\/ \"Ben i\u00e7 fonksiyonum\"\n    console.log(disDegisken); \/\/ \"Ben d\u0131\u015f fonksiyonum\" (d\u0131\u015f Lexical Ortamdan eri\u015fildi)\n    console.log(globalDegisken); \/\/ \"Ben globalim\" (global Lexical Ortamdan eri\u015fildi)\n  }\n  icFonksiyon();\n  \/\/ console.log(icDegisken); \/\/ Hata: icDegisken is not defined (d\u0131\u015f kapsamdan eri\u015filemez)\n}\ndisFonksiyon();<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, <code>icFonksiyon<\/code> kendi kapsam\u0131nda <code>icDegisken<\/code>'i bulamazsa, bir \u00fcst Lexical Ortama (<code>disFonksiyon<\/code>'un Lexical Ortam\u0131) bakar ve <code>disDegisken<\/code>'i bulur. E\u011fer orada da bulamazsa, bir \u00fcst Lexical Ortama (global Lexical Ortam) bakar ve <code>globalDegisken<\/code>'i bulur. Bu, kapsam zincirinin nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6sterir.<\/p>\n<h4><code>this<\/code> Anahtar Kelimesi ve Ba\u011flam\u0131<\/h4>\n<p><code>this<\/code> anahtar kelimesi, JavaScript'teki en kafa kar\u0131\u015ft\u0131r\u0131c\u0131 konulardan biri olabilir \u00e7\u00fcnk\u00fc de\u011feri, fonksiyonun nas\u0131l \u00e7a\u011fr\u0131ld\u0131\u011f\u0131na ba\u011fl\u0131 olarak dinamik olarak de\u011fi\u015fir. <code>this<\/code> ba\u011flam\u0131, bir fonksiyonun y\u00fcr\u00fctme ba\u011flam\u0131nda <code>this<\/code>'in hangi nesneye referans etti\u011fini belirler.<\/p>\n<p>*   <strong>Global Ba\u011flam:<\/strong> Global y\u00fcr\u00fctme ba\u011flam\u0131nda <code>this<\/code>, taray\u0131c\u0131da <code>window<\/code> nesnesine, Node.js'te ise <code>global<\/code> nesnesine referans eder.<br \/>\n*   <strong>Fonksiyon Ba\u011flam\u0131 (Normal Fonksiyonlar):<\/strong><br \/>\n    *   <strong>Varsay\u0131lan Ba\u011flama:<\/strong> S\u0131k\u0131 modda (<code>'use strict'<\/code>) olmayan basit bir fonksiyon \u00e7a\u011fr\u0131s\u0131nda <code>this<\/code>, global nesneye (<code>window<\/code> veya <code>global<\/code>) referans eder. S\u0131k\u0131 modda ise <code>undefined<\/code> olur.<br \/>\n    *   <strong>\u0130mplicit Ba\u011flama (Metot \u00c7a\u011fr\u0131s\u0131):<\/strong> Bir fonksiyon bir nesnenin metodu olarak \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda, <code>this<\/code> o nesneye referans eder.<br \/>\n    *   <strong>Explicit Ba\u011flama (<code>call<\/code>, <code>apply<\/code>, <code>bind<\/code>):<\/strong> Bu metotlar kullan\u0131larak <code>this<\/code>'in de\u011feri a\u00e7\u0131k\u00e7a belirlenebilir.<br \/>\n    *   <strong><code>new<\/code> Ba\u011flama:<\/strong> Bir kurucu fonksiyon <code>new<\/code> anahtar kelimesiyle \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda, <code>this<\/code> yeni olu\u015fturulan nesneye referans eder.<br \/>\n*   <strong>Arrow Fonksiyonlar:<\/strong> Arrow fonksiyonlar kendi <code>this<\/code> ba\u011flamlar\u0131na sahip de\u011fildir. <code>this<\/code> de\u011ferini, tan\u0131mland\u0131klar\u0131 Lexical Ortamdan (yani \u00e7evreleyen kapsamdan) miras al\u0131rlar.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Global ba\u011flam\nconsole.log(this === window); \/\/ Taray\u0131c\u0131da: true\n\nconst nesne = {\n  ad: \"Ali\",\n  selamla: function() {\n    console.log(\"Merhaba, ben \" + this.ad);\n  },\n  selamlaArrow: () => {\n    console.log(\"Merhaba, ben \" + this.ad); \/\/ Global 'this'e referans eder\n  }\n};\n\nnesne.selamla(); \/\/ Merhaba, ben Ali (this = nesne)\nnesne.selamlaArrow(); \/\/ Merhaba, ben undefined (this = window, window.ad undefined)\n\nconst selamlaFonksiyonu = nesne.selamla;\nselamlaFonksiyonu(); \/\/ Merhaba, ben undefined (this = window, varsay\u0131lan ba\u011flama)\n\nconst baskaNesne = { ad: \"Veli\" };\nnesne.selamla.call(baskaNesne); \/\/ Merhaba, ben Veli (explicit ba\u011flama)<\/pre>\n<p><\/code><\/p>\n<p>Bu karma\u015f\u0131k <code>this<\/code> davran\u0131\u015f\u0131n\u0131 anlamak, \u00f6zellikle nesne y\u00f6nelimli JavaScript ve event handler'lar ile \u00e7al\u0131\u015f\u0131rken b\u00fcy\u00fck \u00f6nem ta\u015f\u0131r.<\/p>\n<h3>\u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131 (Call Stack) Nedir ve Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h3>\n<p>JavaScript motoru tek i\u015f par\u00e7ac\u0131kl\u0131 (single-threaded) oldu\u011fu i\u00e7in, bir seferde yaln\u0131zca bir i\u015flem yapabilir. Bu i\u015flemlerin s\u0131ras\u0131n\u0131 y\u00f6neten mekanizma ise \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131'd\u0131r (Call Stack). \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131, bir programdaki fonksiyon \u00e7a\u011fr\u0131lar\u0131n\u0131 izleyen ve hangi fonksiyonun \u015fu anda y\u00fcr\u00fct\u00fclmekte oldu\u011funu belirleyen bir veri yap\u0131s\u0131d\u0131r.<\/p>\n<h4>Tan\u0131m ve LIFO Prensibi<\/h4>\n<p>\u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131, \"Son Giren \u0130lk \u00c7\u0131kar\" (Last In, First Out - LIFO) prensibine g\u00f6re \u00e7al\u0131\u015fan soyut bir veri yap\u0131s\u0131d\u0131r. Bir y\u0131\u011f\u0131n gibi d\u00fc\u015f\u00fcnebilirsiniz: en son eklenen \u00f6\u011fe, y\u0131\u011f\u0131ndan ilk \u00e7\u0131kar\u0131lan \u00f6\u011fe olacakt\u0131r.<\/p>\n<p>*   <strong>Push (Ekleme):<\/strong> Bir fonksiyon \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda, o fonksiyona ait yeni bir y\u00fcr\u00fctme ba\u011flam\u0131 olu\u015fturulur ve \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131'n\u0131n en \u00fcst\u00fcne eklenir (push).<br \/>\n*   <strong>Pop (\u00c7\u0131karma):<\/strong> Bir fonksiyonun y\u00fcr\u00fct\u00fclmesi tamamland\u0131\u011f\u0131nda (yani return ifadesine ula\u015f\u0131ld\u0131\u011f\u0131nda veya bir hata f\u0131rlat\u0131ld\u0131\u011f\u0131nda), o fonksiyona ait y\u00fcr\u00fctme ba\u011flam\u0131 \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131'n\u0131n en \u00fcst\u00fcnden kald\u0131r\u0131l\u0131r (pop).<\/p>\n<h4>Y\u00fcr\u00fctme Ba\u011flamlar\u0131n\u0131n Y\u0131\u011f\u0131na Eklenmesi ve \u00c7\u0131kar\u0131lmas\u0131<\/h4>\n<p>JavaScript motoru, kodu \u00e7al\u0131\u015ft\u0131r\u0131rken s\u00fcrekli olarak \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131'n\u0131 g\u00fcnceller:<\/p>\n<p>1.  Kod \u00e7al\u0131\u015fmaya ba\u015flad\u0131\u011f\u0131nda, Global Y\u00fcr\u00fctme Ba\u011flam\u0131 olu\u015fturulur ve \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131'na eklenir.<br \/>\n2.  Bir fonksiyon \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda, o fonksiyon i\u00e7in yeni bir Fonksiyon Y\u00fcr\u00fctme Ba\u011flam\u0131 olu\u015fturulur ve \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131'n\u0131n en \u00fcst\u00fcne eklenir. Bu ba\u011flam aktif hale gelir.<br \/>\n3.  Aktif ba\u011flamdaki fonksiyon ba\u015fka bir fonksiyonu \u00e7a\u011f\u0131r\u0131rsa, yeni bir ba\u011flam olu\u015fturulur ve yine y\u0131\u011f\u0131n\u0131n en \u00fcst\u00fcne eklenir.<br \/>\n4.  Bir fonksiyonun \u00e7al\u0131\u015fmas\u0131 bitti\u011finde, ilgili y\u00fcr\u00fctme ba\u011flam\u0131 y\u0131\u011f\u0131ndan \u00e7\u0131kar\u0131l\u0131r. Y\u0131\u011f\u0131n\u0131n bir alt\u0131ndaki ba\u011flam tekrar aktif hale gelir.<br \/>\n5.  Global Y\u00fcr\u00fctme Ba\u011flam\u0131 da dahil olmak \u00fczere t\u00fcm ba\u011flamlar y\u0131\u011f\u0131ndan \u00e7\u0131kar\u0131ld\u0131\u011f\u0131nda, program\u0131n y\u00fcr\u00fct\u00fclmesi tamamlan\u0131r.<\/p>\n<h4>\u00d6rnek Senaryo: Fonksiyon Zinciri<\/h4>\n<p>A\u015fa\u011f\u0131daki basit fonksiyon zincirini ve \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131'n\u0131n nas\u0131l de\u011fi\u015fti\u011fini inceleyelim:<\/p>\n<pre><code class=\"language-javascript\">function birinci() {\n  console.log(\"Birinci fonksiyon ba\u015flad\u0131.\");\n  ikinci();\n  console.log(\"Birinci fonksiyon bitti.\");\n}\n\nfunction ikinci() {\n  console.log(\"\u0130kinci fonksiyon ba\u015flad\u0131.\");\n  ucuncu();\n  console.log(\"\u0130kinci fonksiyon bitti.\");\n}\n\nfunction ucuncu() {\n  console.log(\"\u00dc\u00e7\u00fcnc\u00fc fonksiyon ba\u015flad\u0131.\");\n  console.log(\"\u00dc\u00e7\u00fcnc\u00fc fonksiyon bitti.\");\n}\n\nbirinci();<\/pre>\n<p><\/code><\/p>\n<p>Bu kodu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131'n\u0131n durumu ad\u0131m ad\u0131m \u015f\u00f6yle de\u011fi\u015fir:<\/p>\n<p>1.  <strong>Ba\u015flang\u0131\u00e7:<\/strong> \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131 bo\u015f.<br \/>\n2.  <code>birinci()<\/code> \u00e7a\u011fr\u0131l\u0131r:<br \/>\n    *   [Global Y\u00fcr\u00fctme Ba\u011flam\u0131]<br \/>\n    *   [Birinci Fonksiyon Y\u00fcr\u00fctme Ba\u011flam\u0131] (y\u0131\u011f\u0131na eklenir)<br \/>\n3.  <code>ikinci()<\/code> <code>birinci()<\/code> i\u00e7inden \u00e7a\u011fr\u0131l\u0131r:<br \/>\n    *   [Global Y\u00fcr\u00fctme Ba\u011flam\u0131]<br \/>\n    *   [Birinci Fonksiyon Y\u00fcr\u00fctme Ba\u011flam\u0131]<br \/>\n    *   [\u0130kinci Fonksiyon Y\u00fcr\u00fctme Ba\u011flam\u0131] (y\u0131\u011f\u0131na eklenir)<br \/>\n4.  <code>ucuncu()<\/code> <code>ikinci()<\/code> i\u00e7inden \u00e7a\u011fr\u0131l\u0131r:<br \/>\n    *   [Global Y\u00fcr\u00fctme Ba\u011flam\u0131]<br \/>\n    *   [Birinci Fonksiyon Y\u00fcr\u00fctme Ba\u011flam\u0131]<br \/>\n    *   [\u0130kinci Fonksiyon Y\u00fcr\u00fctme Ba\u011flam\u0131]<br \/>\n    *   [\u00dc\u00e7\u00fcnc\u00fc Fonksiyon Y\u00fcr\u00fctme Ba\u011flam\u0131] (y\u0131\u011f\u0131na eklenir)<br \/>\n5.  <code>ucuncu()<\/code> biter:<br \/>\n    *   [Global Y\u00fcr\u00fctme Ba\u011flam\u0131]<br \/>\n    *   [Birinci Fonksiyon Y\u00fcr\u00fctme Ba\u011flam\u0131]<br \/>\n    *   [\u0130kinci Fonksiyon Y\u00fcr\u00fctme Ba\u011flam\u0131] (y\u0131\u011f\u0131ndan \u00e7\u0131kar\u0131l\u0131r)<br \/>\n6.  <code>ikinci()<\/code> biter:<br \/>\n    *   [Global Y\u00fcr\u00fctme Ba\u011flam\u0131]<br \/>\n    *   [Birinci Fonksiyon Y\u00fcr\u00fctme Ba\u011flam\u0131] (y\u0131\u011f\u0131ndan \u00e7\u0131kar\u0131l\u0131r)<br \/>\n7.  <code>birinci()<\/code> biter:<br \/>\n    *   [Global Y\u00fcr\u00fctme Ba\u011flam\u0131] (y\u0131\u011f\u0131ndan \u00e7\u0131kar\u0131l\u0131r)<br \/>\n8.  Program biter: \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131 bo\u015f.<\/p>\n<p>Konsol \u00e7\u0131kt\u0131s\u0131 da bu s\u0131ray\u0131 takip eder:<\/p>\n<pre><code class=\"language-plaintext\">Birinci fonksiyon ba\u015flad\u0131.\n\u0130kinci fonksiyon ba\u015flad\u0131.\n\u00dc\u00e7\u00fcnc\u00fc fonksiyon ba\u015flad\u0131.\n\u00dc\u00e7\u00fcnc\u00fc fonksiyon bitti.\n\u0130kinci fonksiyon bitti.\nBirinci fonksiyon bitti.<\/pre>\n<p><\/code><\/p>\n<h3>Y\u00fcr\u00fctme Ba\u011flam\u0131 ve \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131 Aras\u0131ndaki \u0130li\u015fki<\/h3>\n<p>Y\u00fcr\u00fctme ba\u011flam\u0131 ve \u00e7a\u011fr\u0131 y\u0131\u011f\u0131n\u0131, JavaScript'in nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlamak i\u00e7in birbirini tamamlayan iki anahtar kavramd\u0131r. Biri \"ne\" \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 (ba\u011flam), di\u011feri ise \"hangi s\u0131rada\" \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 (y\u0131\u011f\u0131n) a\u00e7\u0131klar.<\/p>\n<h4>Ak\u0131\u015f Kontrol\u00fc<\/h4>\n<p>\u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131, JavaScript motorunun program\u0131n ak\u0131\u015f\u0131n\u0131 nas\u0131l kontrol etti\u011fini g\u00f6sterir. Her fonksiyon \u00e7a\u011fr\u0131s\u0131 bir y\u00fcr\u00fctme ba\u011flam\u0131 olu\u015fturur ve bu ba\u011flam y\u0131\u011f\u0131na eklenir. Y\u0131\u011f\u0131n\u0131n en \u00fcst\u00fcndeki ba\u011flam her zaman aktif olan ve y\u00fcr\u00fct\u00fclen ba\u011flamd\u0131r. Bir ba\u011flam tamamland\u0131\u011f\u0131nda, y\u0131\u011f\u0131ndan \u00e7\u0131kar\u0131l\u0131r ve kontrol bir alt\u0131ndaki ba\u011flama ge\u00e7er. Bu, JavaScript'in tek i\u015f par\u00e7ac\u0131kl\u0131 do\u011fas\u0131nda, kodun deterministik bir s\u0131rayla \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>Hata Y\u00f6netimi: Stack Overflow<\/h4>\n<p>\u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131'n\u0131n boyutunun bir s\u0131n\u0131r\u0131 vard\u0131r. E\u011fer bir fonksiyon kendini \u00e7ok fazla kez \u00e7a\u011f\u0131r\u0131rsa (rek\u00fcrsif fonksiyonlarda yanl\u0131\u015f bir temel durum veya sonsuz d\u00f6ng\u00fc), y\u0131\u011f\u0131n kapasitesini a\u015fabilir. Bu duruma \"Stack Overflow\" (Y\u0131\u011f\u0131n Ta\u015fmas\u0131) hatas\u0131 denir.<\/p>\n<pre><code class=\"language-javascript\">function sonsuzDongu() {\n  sonsuzDongu(); \/\/ Kendini tekrar tekrar \u00e7a\u011f\u0131r\u0131yor\n}\nsonsuzDongu(); \/\/ Bu bir Stack Overflow hatas\u0131na yol a\u00e7acakt\u0131r<\/pre>\n<p><\/code><\/p>\n<p>Bu hata, JavaScript motorunun daha fazla y\u00fcr\u00fctme ba\u011flam\u0131n\u0131 y\u0131\u011f\u0131na ekleyemedi\u011fini ve program\u0131n durduruldu\u011funu g\u00f6sterir. Hata mesaj\u0131nda genellikle hangi fonksiyonlar\u0131n y\u0131\u011f\u0131nda oldu\u011fu da listelenir, bu da hata ay\u0131klama i\u00e7in faydal\u0131d\u0131r.<\/p>\n<h4>Asenkron JavaScript ve Olay D\u00f6ng\u00fcs\u00fc (Event Loop) ile \u0130li\u015fkisi (K\u0131saca)<\/h4>\n<p>JavaScript tek i\u015f par\u00e7ac\u0131kl\u0131 olmas\u0131na ra\u011fmen, asenkron i\u015flemleri (API \u00e7a\u011fr\u0131lar\u0131, zamanlay\u0131c\u0131lar vb.) Event Loop (Olay D\u00f6ng\u00fcs\u00fc) ve Callback Kuyru\u011fu (Callback Queue) yard\u0131m\u0131yla y\u00f6netir.<\/p>\n<p>*   Asenkron bir i\u015flem ba\u015flat\u0131ld\u0131\u011f\u0131nda, fonksiyon \u00e7a\u011fr\u0131s\u0131 \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131'na eklenir ve hemen \u00e7\u0131kar\u0131l\u0131r (\u00e7\u00fcnk\u00fc asenkron i\u015flem arka planda devam eder).<br \/>\n*   Asenkron i\u015flem tamamland\u0131\u011f\u0131nda, ili\u015fkili callback fonksiyonu Callback Kuyru\u011fu'na eklenir.<br \/>\n*   Event Loop s\u00fcrekli olarak \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131'n\u0131n bo\u015f olup olmad\u0131\u011f\u0131n\u0131 kontrol eder. E\u011fer y\u0131\u011f\u0131n bo\u015fsa, Callback Kuyru\u011fu'ndaki ilk callback fonksiyonunu al\u0131p \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131'na ekler, b\u00f6ylece y\u00fcr\u00fct\u00fclmesini sa\u011flar.<\/p>\n<p>Bu mekanizma, uzun s\u00fcren i\u015flemlerin ana i\u015f par\u00e7ac\u0131\u011f\u0131n\u0131 bloke etmesini \u00f6nler ve JavaScript'in duyarl\u0131 kalmas\u0131n\u0131 sa\u011flar. Y\u00fcr\u00fctme ba\u011flamlar\u0131 ve \u00e7a\u011fr\u0131 y\u0131\u011f\u0131n\u0131, senkron kodun nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 a\u00e7\u0131klarken, Event Loop asenkron kodun bu senkron yap\u0131ya nas\u0131l entegre oldu\u011funu g\u00f6sterir.<\/p>\n<h3>Pratik Uygulamalar ve S\u0131k\u00e7a Yap\u0131lan Hatalar<\/h3>\n<p>Y\u00fcr\u00fctme ba\u011flam\u0131 ve \u00e7a\u011fr\u0131 y\u0131\u011f\u0131n\u0131 kavramlar\u0131n\u0131 anlamak, g\u00fcnl\u00fck JavaScript geli\u015ftirme pratiklerinizde size \u00f6nemli avantajlar sa\u011flar. Bu bilgi, kodunuzu daha \u00f6ng\u00f6r\u00fclebilir hale getirir ve yayg\u0131n hatalar\u0131 \u00f6nlemenize yard\u0131mc\u0131 olur.<\/p>\n<h4>Kapsam (Scope) Anlay\u0131\u015f\u0131n\u0131n \u00d6nemi<\/h4>\n<p>*   <strong><code>var<\/code> vs. <code>let<\/code>\/<code>const<\/code>:<\/strong> <code>var<\/code> fonksiyon kapsaml\u0131d\u0131r ve hoisting davran\u0131\u015f\u0131 nedeniyle beklenmedik sonu\u00e7lara yol a\u00e7abilir. <code>let<\/code> ve <code>const<\/code> ise blok kapsaml\u0131d\u0131r ve Temporal Dead Zone (TDZ) ile daha \u00f6ng\u00f6r\u00fclebilir bir davran\u0131\u015f sergiler. Bu fark\u0131 bilmek, de\u011fi\u015fken bildirimlerinde do\u011fru anahtar kelimeyi se\u00e7menizi sa\u011flar ve kapsam hatalar\u0131n\u0131 azalt\u0131r.<br \/>\n*   <strong>Closure'lar:<\/strong> Bir i\u00e7 fonksiyonun, tan\u0131mland\u0131\u011f\u0131 d\u0131\u015f fonksiyonun kapsam\u0131ndaki de\u011fi\u015fkenlere eri\u015febilmesi durumuna closure denir. Bu, Lexical Ortam ve kapsam zinciri sayesinde m\u00fcmk\u00fcn olur. Closure'lar\u0131 anlamak, ileri d\u00fczey JavaScript desenleri ve mod\u00fcl olu\u015fturma i\u00e7in temeldir.<\/p>\n<pre><code class=\"language-javascript\">for (var i = 0; i < 3; i++) {\n  setTimeout(function() {\n    console.log(i); \/\/ Her zaman 3 yazd\u0131r\u0131r, \u00e7\u00fcnk\u00fc i globalde de\u011fi\u015fir\n  }, 100);\n}\n\nfor (let j = 0; j < 3; j++) {\n  setTimeout(function() {\n    console.log(j); \/\/ 0, 1, 2 yazd\u0131r\u0131r, \u00e7\u00fcnk\u00fc j her d\u00f6ng\u00fcde yeni bir blok kapsam\u0131na sahiptir\n  }, 100);\n}<\/pre>\n<p><\/code><\/p>\n<h4><code>this<\/code> Ba\u011flam\u0131 Yan\u0131lg\u0131lar\u0131<\/h4>\n<p><code>this<\/code> anahtar kelimesinin dinamik do\u011fas\u0131, \u00f6zellikle fonksiyonlar\u0131 farkl\u0131 ba\u011flamlarda \u00e7a\u011f\u0131r\u0131rken veya callback'ler kullan\u0131rken s\u0131k\u00e7a hatalara yol a\u00e7ar.<\/p>\n<p>*   <strong>Metotlar\u0131 Ay\u0131rmak:<\/strong> Bir nesnenin metodunu ayr\u0131 bir de\u011fi\u015fkene atay\u0131p \u00e7a\u011f\u0131rd\u0131\u011f\u0131n\u0131zda, <code>this<\/code> genellikle <code>window<\/code> (veya <code>undefined<\/code> s\u0131k\u0131 modda) olur, \u00e7\u00fcnk\u00fc metot art\u0131k bir nesnenin ba\u011flam\u0131nda \u00e7a\u011fr\u0131lmamaktad\u0131r.<br \/>\n*   <strong>Callback Fonksiyonlar\u0131:<\/strong> Event handler'lar veya zamanlay\u0131c\u0131lar gibi callback fonksiyonlar\u0131nda <code>this<\/code> genellikle \u00e7a\u011fr\u0131 mekanizmas\u0131na g\u00f6re de\u011fi\u015fir. Bu t\u00fcr durumlarda <code>bind()<\/code>, <code>call()<\/code>, <code>apply()<\/code> kullanmak veya arrow fonksiyonlar\u0131 tercih etmek, <code>this<\/code>'i istedi\u011finiz ba\u011flama sabitlemek i\u00e7in yayg\u0131n \u00e7\u00f6z\u00fcmlerdir.<\/p>\n<pre><code class=\"language-javascript\">const kullanici = {\n  ad: \"Ay\u015fe\",\n  selamla: function() {\n    console.log(\"Merhaba, \" + this.ad);\n  }\n};\n\nkullanici.selamla(); \/\/ Merhaba, Ay\u015fe\n\nconst selamlaFonksiyonu = kullanici.selamla;\nselamlaFonksiyonu(); \/\/ Merhaba, undefined (this art\u0131k window'u g\u00f6steriyor)\n\n\/\/ \u00c7\u00f6z\u00fcm: bind() ile ba\u011flam\u0131 sabitleme\nconst bagliSelamla = kullanici.selamla.bind(kullanici);\nbagliSelamla(); \/\/ Merhaba, Ay\u015fe<\/pre>\n<p><\/code><\/p>\n<h4>Rek\u00fcrsif Fonksiyonlar ve Y\u0131\u011f\u0131n Ta\u015fmas\u0131 Riski<\/h4>\n<p>Rek\u00fcrsif fonksiyonlar (kendini \u00e7a\u011f\u0131ran fonksiyonlar) g\u00fc\u00e7l\u00fc ara\u00e7lar olsa da, do\u011fru bir temel durum (base case) olmadan kullan\u0131ld\u0131\u011f\u0131nda Stack Overflow hatas\u0131na neden olabilirler. Her rek\u00fcrsif \u00e7a\u011fr\u0131 yeni bir y\u00fcr\u00fctme ba\u011flam\u0131 olu\u015fturur ve \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131'na eklenir. E\u011fer bu \u00e7a\u011fr\u0131lar durdurulmazsa, y\u0131\u011f\u0131n dolar ve program \u00e7\u00f6ker. Rek\u00fcrsif fonksiyon yazarken her zaman bir \u00e7\u0131k\u0131\u015f ko\u015fulu belirledi\u011finizden emin olun.<\/p>\n<pre><code class=\"language-javascript\">function faktoriyel(n) {\n  if (n === 0) { \/\/ Temel durum\n    return 1;\n  }\n  return n * faktoriyel(n - 1); \/\/ Rek\u00fcrsif \u00e7a\u011fr\u0131\n}\n\nconsole.log(faktoriyel(5)); \/\/ 120\n\/\/ console.log(faktoriyel(10000)); \/\/ Bu, Stack Overflow hatas\u0131na yol a\u00e7abilir!<\/pre>\n<p><\/code><\/p>\n<p>Bu pratik bilgiler, JavaScript'in temel \u00e7al\u0131\u015fma prensiplerini derinlemesine anlaman\u0131n, daha sa\u011flam ve hatas\u0131z uygulamalar geli\u015ftirmenize nas\u0131l yard\u0131mc\u0131 oldu\u011funu g\u00f6stermektedir.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu makalede, JavaScript'in temel \u00e7al\u0131\u015fma mekanizmalar\u0131ndan ikisi olan Y\u00fcr\u00fctme Ba\u011flam\u0131 (Execution Context) ve \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131 (Call Stack) kavramlar\u0131n\u0131 detayl\u0131 bir \u015fekilde inceledik. Y\u00fcr\u00fctme ba\u011flam\u0131n\u0131n, kodun \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131 soyut bir ortam oldu\u011funu, Global, Fonksiyon ve Eval olmak \u00fczere \u00fc\u00e7 t\u00fcr\u00fc bulundu\u011funu ve De\u011fi\u015fken Ortam\u0131, Lexical Ortam ile <code>this<\/code> ba\u011flam\u0131 gibi bile\u015fenlerden olu\u015ftu\u011funu \u00f6\u011frendik. \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131'n\u0131n ise bu y\u00fcr\u00fctme ba\u011flamlar\u0131n\u0131 LIFO prensibiyle y\u00f6neten bir veri yap\u0131s\u0131 oldu\u011funu, fonksiyon \u00e7a\u011fr\u0131lar\u0131n\u0131 nas\u0131l takip etti\u011fini ve hata y\u00f6netiminde (Stack Overflow) oynad\u0131\u011f\u0131 rol\u00fc g\u00f6rd\u00fck. Bu kavramlar\u0131 anlamak, JavaScript'in kapsam (scope), hoisting, <code>this<\/code> anahtar kelimesinin davran\u0131\u015f\u0131 ve asenkron i\u015flemler gibi karma\u015f\u0131k g\u00f6r\u00fcnen y\u00f6nlerini a\u00e7\u0131kl\u0131\u011fa kavu\u015fturur. Art\u0131k kodunuzun sahne arkas\u0131nda nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131na dair daha net bir resme sahipsiniz. Bu bilgi, daha bilin\u00e7li kod yazman\u0131za, hatalar\u0131 daha kolay ay\u0131klaman\u0131za ve JavaScript geli\u015ftirme becerilerinizi bir \u00fcst seviyeye ta\u015f\u0131man\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<h4>Global Y\u00fcr\u00fctme Ba\u011flam\u0131 ne zaman olu\u015fur?<\/h4>\n<p>Global Y\u00fcr\u00fctme Ba\u011flam\u0131, JavaScript motoru bir script dosyas\u0131n\u0131 ilk kez y\u00fckledi\u011finde veya bir taray\u0131c\u0131 sekmesi a\u00e7\u0131ld\u0131\u011f\u0131nda, yani herhangi bir kod \u00e7al\u0131\u015fmaya ba\u015flamadan hemen \u00f6nce olu\u015fturulur. Bir JavaScript uygulamas\u0131n\u0131n \u00f6mr\u00fc boyunca yaln\u0131zca bir tane Global Y\u00fcr\u00fctme Ba\u011flam\u0131 bulunur.<\/p>\n<h4>Lexical Ortam ile De\u011fi\u015fken Ortam\u0131 aras\u0131ndaki temel fark nedir?<\/h4>\n<p>De\u011fi\u015fken Ortam\u0131 (<code>var<\/code> de\u011fi\u015fkenleri ve fonksiyon bildirimleri i\u00e7in) ve Lexical Ortam (<code>let<\/code>, <code>const<\/code> de\u011fi\u015fkenleri ve fonksiyon bildirimleri i\u00e7in) bir y\u00fcr\u00fctme ba\u011flam\u0131n\u0131n bile\u015fenleridir. Temel fark, <code>var<\/code> de\u011fi\u015fkenlerinin De\u011fi\u015fken Ortam\u0131nda <code>undefined<\/code> ile ba\u015flat\u0131larak \"hoisting\"e u\u011framas\u0131d\u0131r. <code>let<\/code> ve <code>const<\/code> de\u011fi\u015fkenleri ise Lexical Ortamda tutulur ve olu\u015fturma a\u015famas\u0131nda ba\u015flat\u0131lmazlar; bu da onlar\u0131 tan\u0131mlanmadan \u00f6nce eri\u015fmeye \u00e7al\u0131\u015f\u0131ld\u0131\u011f\u0131nda \"Temporal Dead Zone\" (TDZ) hatas\u0131na yol a\u00e7ar ve blok kapsam\u0131 sa\u011flarlar.<\/p>\n<h4><code>this<\/code> anahtar kelimesi neden bazen kafa kar\u0131\u015ft\u0131r\u0131c\u0131 olabilir?<\/h4>\n<p><code>this<\/code> anahtar kelimesinin de\u011feri, fonksiyonun nas\u0131l \u00e7a\u011fr\u0131ld\u0131\u011f\u0131na ba\u011fl\u0131 olarak dinamik olarak de\u011fi\u015fti\u011fi i\u00e7in kafa kar\u0131\u015ft\u0131r\u0131c\u0131 olabilir. Global ba\u011flamda <code>window<\/code>'a (taray\u0131c\u0131da) veya <code>global<\/code>'a (Node.js'te) i\u015faret ederken, bir nesnenin metodu olarak \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda o nesneye i\u015faret eder. Arrow fonksiyonlar\u0131 ise kendi <code>this<\/code> ba\u011flamlar\u0131na sahip de\u011fildir ve \u00e7evreleyen Lexical Ortamdan <code>this<\/code> de\u011ferini miras al\u0131rlar. Bu farkl\u0131 davran\u0131\u015flar, <code>this<\/code>'in de\u011ferini tahmin etmeyi zorla\u015ft\u0131rabilir.<\/p>\n<h4>JavaScript tek i\u015f par\u00e7ac\u0131kl\u0131 (single-threaded) ise asenkron i\u015flemleri nas\u0131l y\u00f6netir?<\/h4>\n<p>JavaScript, tek i\u015f par\u00e7ac\u0131kl\u0131 olmas\u0131na ra\u011fmen, asenkron i\u015flemleri (\u00f6rne\u011fin, a\u011f istekleri, zamanlay\u0131c\u0131lar) Event Loop (Olay D\u00f6ng\u00fcs\u00fc) ve Callback Kuyru\u011fu (Callback Queue) ad\u0131 verilen mekanizmalar arac\u0131l\u0131\u011f\u0131yla y\u00f6netir. Asenk<\/p>\n","protected":false},"excerpt":{"rendered":"JavaScript Nas\u0131l \u00c7al\u0131\u015f\u0131r? B\u00f6l\u00fcm 2: Y\u00fcr\u00fctme Ba\u011flam\u0131 ve \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131na Derin Bir Bak\u0131\u015f JavaScript&#8217;in b\u00fcy\u00fcleyici d\u00fcnyas\u0131nda derinlere inmeye haz\u0131r m\u0131s\u0131n\u0131z?","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[129],"tags":[],"class_list":{"0":"post-40954","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-javascript","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>JavaScript Nas\u0131l \u00c7al\u0131\u015f\u0131r? B\u00f6l\u00fcm 2: Y\u00fcr\u00fctme Ba\u011flam\u0131 ve \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131na Derin Bir Bak\u0131\u015f - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JavaScript Nas\u0131l \u00c7al\u0131\u015f\u0131r? B\u00f6l\u00fcm 2: Y\u00fcr\u00fctme Ba\u011flam\u0131 ve \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131na Derin Bir Bak\u0131\u015f\" \/>\n<meta property=\"og:description\" content=\"JavaScript Nas\u0131l \u00c7al\u0131\u015f\u0131r? B\u00f6l\u00fcm 2: Y\u00fcr\u00fctme Ba\u011flam\u0131 ve \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131na Derin Bir Bak\u0131\u015f JavaScript&#039;in b\u00fcy\u00fcleyici d\u00fcnyas\u0131nda derinlere inmeye haz\u0131r m\u0131s\u0131n\u0131z?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-02T11:00:45+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"JavaScript Nas\u0131l \u00c7al\u0131\u015f\u0131r? B\u00f6l\u00fcm 2: Y\u00fcr\u00fctme Ba\u011flam\u0131 ve \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131na Derin Bir Bak\u0131\u015f\",\"datePublished\":\"2026-03-02T11:00:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis\/\"},\"wordCount\":3313,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Javascript\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis\/\",\"name\":\"JavaScript Nas\u0131l \u00c7al\u0131\u015f\u0131r? B\u00f6l\u00fcm 2: Y\u00fcr\u00fctme Ba\u011flam\u0131 ve \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131na Derin Bir Bak\u0131\u015f - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-03-02T11:00:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JavaScript Nas\u0131l \u00c7al\u0131\u015f\u0131r? B\u00f6l\u00fcm 2: Y\u00fcr\u00fctme Ba\u011flam\u0131 ve \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131na Derin Bir Bak\u0131\u015f\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"JavaScript Nas\u0131l \u00c7al\u0131\u015f\u0131r? B\u00f6l\u00fcm 2: Y\u00fcr\u00fctme Ba\u011flam\u0131 ve \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131na Derin Bir Bak\u0131\u015f - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis\/","og_locale":"tr_TR","og_type":"article","og_title":"JavaScript Nas\u0131l \u00c7al\u0131\u015f\u0131r? B\u00f6l\u00fcm 2: Y\u00fcr\u00fctme Ba\u011flam\u0131 ve \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131na Derin Bir Bak\u0131\u015f","og_description":"JavaScript Nas\u0131l \u00c7al\u0131\u015f\u0131r? B\u00f6l\u00fcm 2: Y\u00fcr\u00fctme Ba\u011flam\u0131 ve \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131na Derin Bir Bak\u0131\u015f JavaScript'in b\u00fcy\u00fcleyici d\u00fcnyas\u0131nda derinlere inmeye haz\u0131r m\u0131s\u0131n\u0131z?","og_url":"https:\/\/fatihsoysal.com\/blog\/javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-03-02T11:00:45+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"19 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"JavaScript Nas\u0131l \u00c7al\u0131\u015f\u0131r? B\u00f6l\u00fcm 2: Y\u00fcr\u00fctme Ba\u011flam\u0131 ve \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131na Derin Bir Bak\u0131\u015f","datePublished":"2026-03-02T11:00:45+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis\/"},"wordCount":3313,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Javascript"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis\/","url":"https:\/\/fatihsoysal.com\/blog\/javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis\/","name":"JavaScript Nas\u0131l \u00c7al\u0131\u015f\u0131r? B\u00f6l\u00fcm 2: Y\u00fcr\u00fctme Ba\u011flam\u0131 ve \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131na Derin Bir Bak\u0131\u015f - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-03-02T11:00:45+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/javascript-nasil-calisir-bolum-2-yurutme-baglami-ve-cagri-yiginina-derin-bir-bakis\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"JavaScript Nas\u0131l \u00c7al\u0131\u015f\u0131r? B\u00f6l\u00fcm 2: Y\u00fcr\u00fctme Ba\u011flam\u0131 ve \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131na Derin Bir Bak\u0131\u015f"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/40954","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=40954"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/40954\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=40954"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=40954"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=40954"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}