{"id":30776,"date":"2025-10-02T01:02:14","date_gmt":"2025-10-01T22:02:14","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/javascript-degiskenleri-neden-bu-kadar-onemli\/"},"modified":"2025-10-02T01:02:14","modified_gmt":"2025-10-01T22:02:14","slug":"javascript-degiskenleri-neden-bu-kadar-onemli","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/javascript-degiskenleri-neden-bu-kadar-onemli\/","title":{"rendered":"JavaScript De\u011fi\u015fkenleri Neden Bu Kadar \u00d6nemli?"},"content":{"rendered":"<p><body><br \/>\n<span>JavaScript De\u011fi\u015fkenler: Programlaman\u0131n Temel Ta\u015f\u0131<\/span><\/p>\n<p>\nJavaScript de\u011fi\u015fkenleri, modern web uygulamalar\u0131n\u0131n ve programlama mant\u0131\u011f\u0131n\u0131n temel yap\u0131 ta\u015flar\u0131ndan biridir. Kodunuzda ge\u00e7ici veya kal\u0131c\u0131 olarak bilgi depolaman\u0131n ve bu bilgilere eri\u015fmenin anahtar mekanizmas\u0131d\u0131r. Bu kapsaml\u0131 rehberde, <code>var<\/code>, <code>let<\/code>, <code>const<\/code> gibi de\u011fi\u015fken tan\u0131mlama y\u00f6ntemleri aras\u0131ndaki kritik farklar\u0131, kullan\u0131m alanlar\u0131n\u0131 ve en iyi uygulamalar\u0131 derinlemesine inceleyece\u011fiz. B\u00f6ylece, programlama ser\u00fcveninize sa\u011flam bir ba\u015flang\u0131\u00e7 yapacak ve JavaScript&#8217;in veri y\u00f6netimi yeteneklerini tam anlam\u0131yla kavrayacaks\u0131n\u0131z.\n<\/p>\n<p>\nProgramlama d\u00fcnyas\u0131na ad\u0131m atan herkesin ilk \u00f6\u011frendi\u011fi kavramlardan biri de\u011fi\u015fkenlerdir. Peki, bu de\u011fi\u015fkenler neden bu kadar b\u00fcy\u00fck bir \u00f6neme sahiptir ve herhangi bir programlama dilinde, \u00f6zellikle de JavaScript&#8217;te, neden vazge\u00e7ilmez bir role sahiptirler? En basit ifadeyle, de\u011fi\u015fkenler, bilgisayar belle\u011finde ge\u00e7ici olarak veri depolamak i\u00e7in kullan\u0131lan isimlendirilmi\u015f depolama alanlar\u0131d\u0131r. T\u0131pk\u0131 bir kutunun i\u00e7ine e\u015fyalar\u0131n\u0131z\u0131 koyup \u00fczerine bir etiket yap\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131z gibi, de\u011fi\u015fkenler de bilgileri saklamam\u0131z\u0131 ve bu bilgilere bir isim arac\u0131l\u0131\u011f\u0131yla kolayca eri\u015fmemizi sa\u011flar. Bu sayede, program\u0131n\u0131z\u0131n farkl\u0131 noktalar\u0131nda ayn\u0131 verilere ba\u015fvurabilir, onlar\u0131 de\u011fi\u015ftirebilir ve manip\u00fcle edebilirsiniz.\n<\/p>\n<p>\nBir web uygulamas\u0131nda kullan\u0131c\u0131 ad\u0131, al\u0131\u015fveri\u015f sepetindeki \u00fcr\u00fcn say\u0131s\u0131, bir butonun t\u0131klanma durumu veya anl\u0131k d\u00f6viz kuru gibi y\u00fczlerce farkl\u0131 t\u00fcrde veriyi y\u00f6netmeniz gerekebilir. \u0130\u015fte tam bu noktada, de\u011fi\u015fkenler devreye girer. Bu verileri her seferinde ba\u015ftan yazmak yerine, bir de\u011fi\u015fkene atayarak program\u0131n\u0131z\u0131n daha d\u00fczenli, okunabilir ve y\u00f6netilebilir olmas\u0131n\u0131 sa\u011flars\u0131n\u0131z. \u00d6rne\u011fin, bir kullan\u0131c\u0131n\u0131n sepetine \u00fcr\u00fcn ekledi\u011finde, <code>sepetUrunSayisi<\/code> ad\u0131nda bir de\u011fi\u015fkenin de\u011ferini art\u0131rmak, kodun ne yapt\u0131\u011f\u0131n\u0131 \u00e7ok daha net bir \u015fekilde ortaya koyar. Ayr\u0131ca, e\u011fer sepetin maksimum \u00fcr\u00fcn kapasitesi gibi bir sabit de\u011fer varsa, bunu <code>MAX_SEPET_KAPASITESI<\/code> gibi bir de\u011fi\u015fkende saklamak, program\u0131n bak\u0131m\u0131n\u0131 ve gelecekteki de\u011fi\u015fiklikleri kolayla\u015ft\u0131r\u0131r.\n<\/p>\n<p>\nDe\u011fi\u015fkenler olmadan, kodunuz karma\u015f\u0131k, tekrarlayan ve hatalara a\u00e7\u0131k hale gelir. Herhangi bir veri de\u011fi\u015fikli\u011fi gerekti\u011finde, bu verinin ge\u00e7ti\u011fi t\u00fcm sat\u0131rlar\u0131 tek tek bulup g\u00fcncellemeniz gerekir ki bu, b\u00fcy\u00fck projelerde neredeyse imkans\u0131zd\u0131r. Dolay\u0131s\u0131yla, de\u011fi\u015fkenler sadece veri depolamakla kalmaz, ayn\u0131 zamanda kodun mod\u00fclerli\u011fini, esnekli\u011fini ve yeniden kullan\u0131labilirli\u011fini art\u0131rarak modern yaz\u0131l\u0131m geli\u015ftirmenin temelini olu\u015fturur. JavaScript&#8217;in dinamik yap\u0131s\u0131 sayesinde, de\u011fi\u015fkenler farkl\u0131 t\u00fcrlerdeki verileri (say\u0131lar, metinler, boolean de\u011ferler, nesneler vb.) kolayca saklayabilir ve hatta \u00e7al\u0131\u015fma zaman\u0131nda tiplerini de\u011fi\u015ftirebilir. Bu esneklik, geli\u015ftiricilere b\u00fcy\u00fck bir g\u00fc\u00e7 verirken, ayn\u0131 zamanda de\u011fi\u015fkenlerin do\u011fru ve dikkatli bir \u015fekilde y\u00f6netilmesini de zorunlu k\u0131lar. Bu y\u00fczden, de\u011fi\u015fkenlerin nas\u0131l tan\u0131mland\u0131\u011f\u0131n\u0131, nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 ve aralar\u0131ndaki farklar\u0131 anlamak, etkili JavaScript kodu yazman\u0131n ilk ve en \u00f6nemli ad\u0131m\u0131d\u0131r.\n<\/p>\n<h3>JavaScript&#8217;te De\u011fi\u015fken Tan\u0131mlama: Var, Let ve Const Aras\u0131ndaki Farklar Nelerdir?<\/h3>\n<p>\nJavaScript&#8217;te de\u011fi\u015fken tan\u0131mlamak i\u00e7in \u00fc\u00e7 ana anahtar kelime bulunur: <code>var<\/code>, <code>let<\/code> ve <code>const<\/code>. Tarihsel olarak <code>var<\/code> en eski y\u00f6ntemdir ve JavaScript&#8217;in ilk zamanlar\u0131ndan beri kullan\u0131lmaktad\u0131r. Ancak ES6 (ECMAScript 2015) ile birlikte hayat\u0131m\u0131za giren <code>let<\/code> ve <code>const<\/code>, de\u011fi\u015fken y\u00f6netimi konusunda \u00e7ok daha modern ve g\u00fcvenli yakla\u015f\u0131mlar sunmu\u015ftur. Bu \u00fc\u00e7 anahtar kelimenin her birinin kendine has \u00f6zellikleri, kapsama alanlar\u0131 (scope) ve kullan\u0131m senaryolar\u0131 vard\u0131r. Bu farklar\u0131 anlamak, temiz, hatas\u0131z ve bak\u0131m\u0131 kolay JavaScript kodu yazmak i\u00e7in kritik \u00f6neme sahiptir.\n<\/p>\n<h4><code>var<\/code> Anahtar Kelimesi: Geleneksel Yakla\u015f\u0131m<\/h4>\n<p>\n<code>var<\/code> ile tan\u0131mlanan de\u011fi\u015fkenler, JavaScript&#8217;in en eski ve en esnek de\u011fi\u015fken tan\u0131mlama y\u00f6ntemidir. Temel \u00f6zelli\u011fi &#8216;function scope&#8217;a sahip olmas\u0131d\u0131r. Yani, bir fonksiyon i\u00e7inde tan\u0131mlanan <code>var<\/code> de\u011fi\u015fkeni yaln\u0131zca o fonksiyon i\u00e7inde eri\u015filebilirken, fonksiyon d\u0131\u015f\u0131nda tan\u0131mlanan bir <code>var<\/code> de\u011fi\u015fkeni global scope&#8217;ta bulunur ve her yerden eri\u015filebilir. En \u00f6nemli davran\u0131\u015flar\u0131ndan biri de &#8216;hoisting&#8217;dir. <code>var<\/code> ile tan\u0131mlanan bir de\u011fi\u015fken, i\u00e7inde bulundu\u011fu scope&#8217;un en \u00fcst\u00fcne ta\u015f\u0131n\u0131r, ancak sadece bildirimi (declaration) ta\u015f\u0131n\u0131r, atamas\u0131 (initialization) de\u011fil. Bu durum, beklenmedik davran\u0131\u015flara ve hatalara yol a\u00e7abilir. \u00d6rne\u011fin:\n<\/p>\n<pre><code>\n  console.log(mesaj); \/\/ undefined (hoisting nedeniyle bildirim yukar\u0131 ta\u015f\u0131n\u0131r)\n  var mesaj = \"Merhaba d\u00fcnya!\";\n  console.log(mesaj); \/\/ Merhaba d\u00fcnya!\n\n  function ornekFonksiyon() {\n    var sayi = 10;\n    if (true) {\n      var sayi = 20; \/\/ Ayn\u0131 de\u011fi\u015fken yeniden tan\u0131mlanabilir!\n      console.log(sayi); \/\/ 20\n    }\n    console.log(sayi); \/\/ 20 (var block scope'a sahip de\u011fil)\n  }\n  ornekFonksiyon();\n  \/\/ console.log(sayi); \/\/ Hata: sayi is not defined (function scope)\n<\/pre>\n<p><\/code><\/p>\n<p>\nYukar\u0131daki \u00f6rnekte g\u00f6rebilece\u011finiz gibi, <code>var<\/code> ile ayn\u0131 isimde bir de\u011fi\u015fkeni birden fazla kez tan\u0131mlamak m\u00fcmk\u00fcnd\u00fcr ve bu durum genellikle kodun karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 ve hata potansiyelini art\u0131r\u0131r. Ayr\u0131ca, <code>if<\/code> blo\u011fu i\u00e7inde tan\u0131mlanan <code>sayi<\/code> de\u011fi\u015fkeninin <code>if<\/code> blo\u011fu d\u0131\u015f\u0131ndan da eri\u015filebilir olmas\u0131 (<code>function scope<\/code> nedeniyle), \u00e7o\u011fu zaman istenmeyen bir durumdur ve 'shadowing' gibi hatalara yol a\u00e7abilir.\n<\/p>\n<h4><code>let<\/code> Anahtar Kelimesi: Esnek ve G\u00fcvenli Se\u00e7im<\/h4>\n<p>\n<code>let<\/code> anahtar kelimesi, ES6 ile birlikte gelmi\u015f ve <code>var<\/code>'\u0131n bir\u00e7ok dezavantaj\u0131n\u0131 gidermi\u015ftir. En belirgin \u00f6zelli\u011fi 'block scope'a sahip olmas\u0131d\u0131r. Bu, <code>let<\/code> ile tan\u0131mlanan bir de\u011fi\u015fkenin yaln\u0131zca tan\u0131mland\u0131\u011f\u0131 blok (s\u00fcsl\u00fc parantezler <code>{}<\/code>) veya alt bloklar i\u00e7inde eri\u015filebilir oldu\u011fu anlam\u0131na gelir. <code>let<\/code> de\u011fi\u015fkenleri yeniden tan\u0131mlanamaz, ancak de\u011ferleri sonradan de\u011fi\u015ftirilebilir. <code>let<\/code> de hoisting'e tabidir, ancak 'Temporal Dead Zone (TDZ)' ad\u0131 verilen bir mekanizma nedeniyle, de\u011fi\u015fken tan\u0131mlanmadan \u00f6nce eri\u015filmeye \u00e7al\u0131\u015f\u0131l\u0131rsa bir hata f\u0131rlat\u0131r. Bu, <code>var<\/code>'daki <code>undefined<\/code> sorununu \u00e7\u00f6zerek daha g\u00fcvenli bir davran\u0131\u015f sunar.\n<\/p>\n<pre><code>\n  \/\/ console.log(isim); \/\/ Hata: Cannot access 'isim' before initialization (TDZ)\n  let isim = \"Ahmet\";\n  console.log(isim); \/\/ Ahmet\n\n  function ornekFonksiyonLet() {\n    let yas = 30;\n    if (true) {\n      let yas = 40; \/\/ Farkl\u0131 bir de\u011fi\u015fken, yeni bir block scope'ta\n      console.log(yas); \/\/ 40\n    }\n    console.log(yas); \/\/ 30 (D\u0131\u015f bloktaki yas de\u011fi\u015fkeni hala ge\u00e7erli)\n  }\n  ornekFonksiyonLet();\n\n  let renk = \"mavi\";\n  \/\/ let renk = \"k\u0131rm\u0131z\u0131\"; \/\/ Hata: 'renk' zaten tan\u0131mlanm\u0131\u015f\n  renk = \"ye\u015fil\"; \/\/ De\u011feri de\u011fi\u015ftirilebilir\n  console.log(renk); \/\/ ye\u015fil\n<\/pre>\n<p><\/code><\/p>\n<p>\n<code>let<\/code> sayesinde, de\u011fi\u015fkenlerin kapsam\u0131n\u0131 daha iyi kontrol edebilir ve ayn\u0131 isme sahip de\u011fi\u015fkenlerin farkl\u0131 bloklarda ba\u011f\u0131ms\u0131z olarak \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayabiliriz. Bu, \u00f6zellikle d\u00f6ng\u00fcler ve ko\u015fullu ifadeler i\u00e7inde de\u011fi\u015fken y\u00f6netimi yaparken kodun okunabilirli\u011fini ve g\u00fcvenilirli\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r.\n<\/p>\n<h4><code>const<\/code> Anahtar Kelimesi: Sabit De\u011ferler \u0130\u00e7in<\/h4>\n<p>\n<code>const<\/code> da <code>let<\/code> gibi ES6 ile gelmi\u015f olup, <code>let<\/code> ile benzer \u015fekilde 'block scope' ve 'Temporal Dead Zone (TDZ)' \u00f6zelliklerine sahiptir. Ancak <code>const<\/code>'un temel fark\u0131, bir kez tan\u0131mland\u0131ktan sonra de\u011ferinin <b>de\u011fi\u015ftirilemez<\/b> olmas\u0131d\u0131r. Bu y\u00fczden <code>const<\/code> ile bir de\u011fi\u015fken tan\u0131mlad\u0131\u011f\u0131n\u0131zda, ona hemen bir ba\u015flang\u0131\u00e7 de\u011feri ataman\u0131z zorunludur. Genellikle sabit kalmas\u0131 beklenen de\u011ferler (\u00f6rne\u011fin, bir API anahtar\u0131, maksimum deneme say\u0131s\u0131, PI say\u0131s\u0131) i\u00e7in kullan\u0131l\u0131r.\n<\/p>\n<pre><code>\n  const PI = 3.14159;\n  \/\/ PI = 3.14; \/\/ Hata: Assignment to constant variable.\n\n  const KULLANICI_ADI = \"admin\";\n  \/\/ const KULLANICI_ADI; \/\/ Hata: Missing initializer in const declaration\n\n  function ornekFonksiyonConst() {\n    const ID = 123;\n    if (true) {\n      const ID = 456; \/\/ Yeni bir block scope'ta farkl\u0131 bir ID\n      console.log(ID); \/\/ 456\n    }\n    console.log(ID); \/\/ 123\n  }\n  ornekFonksiyonConst();\n<\/pre>\n<p><\/code><\/p>\n<p>\nDikkat edilmesi gereken \u00f6nemli bir nokta, <code>const<\/code>'un de\u011fi\u015fkenin kendisinin referans\u0131n\u0131 sabitlemesidir, de\u011ferini de\u011fil (ilkel tipler i\u00e7in de\u011ferini de sabitler). E\u011fer bir <code>const<\/code> de\u011fi\u015fkenine bir nesne veya dizi atan\u0131rsa, bu nesne veya dizinin \u00f6zelliklerini veya elemanlar\u0131n\u0131 de\u011fi\u015ftirmek m\u00fcmk\u00fcnd\u00fcr. <code>const<\/code> sadece o de\u011fi\u015fkenin ba\u015fka bir nesneye\/diziye yeniden atanamayaca\u011f\u0131n\u0131 garanti eder.\n<\/p>\n<pre><code>\n  const ayarlar = { tema: \"dark\", dil: \"tr\" };\n  ayarlar.tema = \"light\"; \/\/ Bu ge\u00e7erlidir! Nesnenin i\u00e7eri\u011fi de\u011fi\u015febilir.\n  console.log(ayarlar); \/\/ { tema: \"light\", dil: \"tr\" }\n\n  \/\/ ayarlar = { tema: \"light\", dil: \"en\" }; \/\/ Hata: Assignment to constant variable.\n<\/pre>\n<p><\/code><\/p>\n<p>\nVaka Analizi: Neden <code>let<\/code> ve <code>const<\/code> tercih edilmeli?<br \/>\nModern JavaScript geli\u015ftirme pratiklerinde, <code>var<\/code> kullan\u0131m\u0131 genellikle tavsiye edilmez. <code>var<\/code>'\u0131n esnekli\u011fi (yeniden tan\u0131mlanabilme, function scope) \u00e7o\u011fu zaman istenmeyen yan etkilere ve hatalara yol a\u00e7abilir, \u00f6zellikle b\u00fcy\u00fck kod tabanlar\u0131nda veya tak\u0131m \u00e7al\u0131\u015fmalar\u0131nda. \u00d6rne\u011fin, bir d\u00f6ng\u00fc i\u00e7inde <code>var<\/code> ile tan\u0131mlanan bir de\u011fi\u015fken, d\u00f6ng\u00fc d\u0131\u015f\u0131ndan da eri\u015filebilir hale gelir ve d\u00f6ng\u00fc tamamland\u0131ktan sonra bile son de\u011ferini korur. Bu, \u00f6zellikle asenkron i\u015flemlerde (callbacks, Promises) beklenmedik sonu\u00e7lara yol a\u00e7abilir.\n<\/p>\n<p>\nBunun yerine, geli\u015ftiricilere genellikle \u015fu kurala uymalar\u0131 tavsiye edilir: e\u011fer bir de\u011fi\u015fkenin de\u011feri asla de\u011fi\u015fmeyecekse <code>const<\/code> kullan\u0131n. E\u011fer de\u011fi\u015fkenin de\u011feri daha sonra de\u011fi\u015fecekse (\u00f6rne\u011fin, bir saya\u00e7, bir form alan\u0131 de\u011feri), <code>let<\/code> kullan\u0131n. Bu yakla\u015f\u0131m, kodun niyetini a\u00e7\u0131k\u00e7a belirtir ve potansiyel hatalar\u0131 azalt\u0131r. <code>const<\/code> kullanmak, kodun daha g\u00fcvenli ve \u00f6ng\u00f6r\u00fclebilir olmas\u0131n\u0131 sa\u011flar, \u00e7\u00fcnk\u00fc bir de\u011ferin yanl\u0131\u015fl\u0131kla de\u011fi\u015ftirilmesini engeller. <code>let<\/code> ise, dinamik gereksinimleri kar\u015f\u0131larken <code>var<\/code>'\u0131n getirdi\u011fi kapsam (scope) karma\u015f\u0131kl\u0131klar\u0131ndan ka\u00e7\u0131nman\u0131z\u0131 sa\u011flar. Bu modern pratikler, JavaScript ekosisteminde kabul g\u00f6rm\u00fc\u015f standartlar haline gelmi\u015ftir.\n<\/p>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: Bir de\u011fi\u015fkene karar verirken her zaman \u00f6nce <code>const<\/code> kullanmay\u0131 d\u00fc\u015f\u00fcn\u00fcn. E\u011fer de\u011ferini de\u011fi\u015ftirmek zorundaysan\u0131z, o zaman <code>let<\/code>'e ge\u00e7in. <code>var<\/code>'\u0131 ise modern projelerde neredeyse hi\u00e7 kullanmaman\u0131z \u015fiddetle tavsiye edilir. Bu, kodunuzun daha \u00f6ng\u00f6r\u00fclebilir ve hatas\u0131z olmas\u0131n\u0131 sa\u011flar.\n<\/div>\n<h2>De\u011fi\u011fi\u015fken \u0130simlendirme Kurallar\u0131 ve En \u0130yi Uygulamalar Nelerdir?<\/h2>\n<p>\nJavaScript'te de\u011fi\u015fken tan\u0131mlamak kadar, onlara anlaml\u0131 ve kurallara uygun isimler vermek de b\u00fcy\u00fck \u00f6nem ta\u015f\u0131r. De\u011fi\u015fken isimleri, kodun okunabilirli\u011fini, anla\u015f\u0131labilirli\u011fini ve bak\u0131m\u0131n\u0131 do\u011frudan etkiler. K\u00f6t\u00fc isimlendirilmi\u015f bir de\u011fi\u015fken, gelecekteki bir geli\u015ftirici (hatta kendiniz bile!) i\u00e7in kodu anlamay\u0131 ve hata ay\u0131klamay\u0131 kabusa \u00e7evirebilir. Bu nedenle, JavaScript'in de\u011fi\u015fken isimlendirme kurallar\u0131na uyman\u0131n yan\u0131 s\u0131ra, sekt\u00f6rdeki en iyi pratikleri de benimsemek kritik bir beceridir.\n<\/p>\n<h3>JavaScript De\u011fi\u015fken \u0130simlendirme Kurallar\u0131<\/h3>\n<p>\nJavaScript motoru taraf\u0131ndan zorunlu k\u0131l\u0131nan baz\u0131 temel kurallar vard\u0131r:\n<\/p>\n<ul>\n<li><strong>Harfler, Rakamlar, Alt \u00c7izgi (<code>_<\/code>) ve Dolar \u0130\u015fareti (<code>$<\/code>)<\/strong>: De\u011fi\u015fken isimleri bu karakterleri i\u00e7erebilir.<\/li>\n<li><strong>Say\u0131 ile Ba\u015flayamaz<\/strong>: De\u011fi\u015fken isimleri bir say\u0131 ile ba\u015flayamaz (\u00f6rne\u011fin, <code>1numara<\/code> ge\u00e7ersizdir).<\/li>\n<li><strong>Bo\u015fluk \u0130\u00e7eremez<\/strong>: De\u011fi\u015fken isimlerinde bo\u015fluk kullan\u0131lamaz (\u00f6rne\u011fin, <code>kullanici adi<\/code> ge\u00e7ersizdir).<\/li>\n<li><strong>B\u00fcy\u00fck\/K\u00fc\u00e7\u00fck Harf Duyarl\u0131l\u0131\u011f\u0131<\/strong>: JavaScript b\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harfe duyarl\u0131d\u0131r. Yani, <code>mesaj<\/code>, <code>Mesaj<\/code> ve <code>MESAJ<\/code> \u00fc\u00e7 farkl\u0131 de\u011fi\u015fkendir.<\/li>\n<li><strong>Rezerv Kelimelerden Ka\u00e7\u0131nma<\/strong>: JavaScript'in kendi anahtar kelimeleri (reserved keywords) de\u011fi\u015fken ismi olarak kullan\u0131lamaz. \u00d6rne\u011fin, <code>for<\/code>, <code>while<\/code>, <code>function<\/code>, <code>let<\/code>, <code>const<\/code>, <code>var<\/code>, <code>if<\/code>, <code>else<\/code>, <code>return<\/code> gibi kelimeler kullan\u0131lamaz.<\/li>\n<\/ul>\n<p>\nGe\u00e7ersiz ve Ge\u00e7erli \u0130simlendirme \u00d6rnekleri:\n<\/p>\n<pre><code>\n  \/\/ Ge\u00e7erli \u0130simler\n  let kullaniciAdi = \"Ali\";\n  let _telefonNumarasi = \"5551234567\";\n  let $fiyat = 99.99;\n  let toplam_maliyet = 250;\n  let mesaj9 = \"Merhaba\";\n\n  \/\/ Ge\u00e7ersiz \u0130simler (hata verir)\n  \/\/ let 1urun = \"Elma\"; \/\/ Say\u0131 ile ba\u015fl\u0131yor\n  \/\/ let ilk urun = \"Armut\"; \/\/ Bo\u015fluk i\u00e7eriyor\n  \/\/ let for = \"d\u00f6ng\u00fc\"; \/\/ Rezerv kelime\n  \/\/ let const = \"sabit\"; \/\/ Rezerv kelime\n<\/pre>\n<p><\/code><\/p>\n<h3>De\u011fi\u015fken \u0130simlendirmede En \u0130yi Uygulamalar (Konvansiyonlar)<\/h3>\n<p>\nKurallara uymak yeterli de\u011fildir; kodun kalitesini art\u0131rmak i\u00e7in belirli isimlendirme konvansiyonlar\u0131na uymak da \u00f6nemlidir.\n<\/p>\n<ol>\n<li><strong>CamelCase (<code>camelCase<\/code>)<\/strong>: JavaScript'te en yayg\u0131n kullan\u0131lan isimlendirme konvansiyonudur. \u0130lk kelime k\u00fc\u00e7\u00fck harfle ba\u015flar, sonraki kelimelerin ilk harfleri b\u00fcy\u00fck olur. De\u011fi\u015fkenler ve fonksiyonlar i\u00e7in kullan\u0131l\u0131r.\n<pre><code>\n      let toplamSiparisAdedi = 15;\n      let urunFiyatiHesapla = (adet, fiyat) => adet * fiyat;\n    <\/pre>\n<p><\/code>\n  <\/li>\n<li><strong>PascalCase (<code>PascalCase<\/code>)<\/strong>: Her kelimenin ilk harfi b\u00fcy\u00fck harfle ba\u015flar. Genellikle s\u0131n\u0131f isimleri ve yap\u0131c\u0131 fonksiyonlar (constructor functions) i\u00e7in kullan\u0131l\u0131r.\n<pre><code>\n      class KullaniciProfil { \/* ... *\/ }\n      function SiparisDetay(urun, adet) { \/* ... *\/ }\n    <\/pre>\n<p><\/code>\n  <\/li>\n<li><strong>Snake_case (<code>snake_case<\/code>)<\/strong>: Kelimeler alt \u00e7izgi ile ayr\u0131l\u0131r. Baz\u0131 dillerde (Python gibi) yayg\u0131n olsa da, JavaScript'te genellikle sabitler d\u0131\u015f\u0131nda tercih edilmez.\n<pre><code>\n      \/\/ Genellikle di\u011fer dillerde veya sabitlerde kullan\u0131l\u0131r.\n      \/\/ let toplam_tutar = 100; \/\/ JavaScript'te pek yayg\u0131n de\u011fil\n    <\/pre>\n<p><\/code>\n  <\/li>\n<li><strong>Kebab-case (<code>kebab-case<\/code>)<\/strong>: Kelimeler tire ile ayr\u0131l\u0131r. HTML\/CSS'de yayg\u0131n olsa da, JavaScript de\u011fi\u015fken isimleri i\u00e7in kullan\u0131lamaz \u00e7\u00fcnk\u00fc tire \u00e7\u0131karma operat\u00f6r\u00fc olarak yorumlan\u0131r.<\/li>\n<li><strong>B\u00fcy\u00fck Harflerle ve Alt \u00c7izgi ile (<code>UPPER_SNAKE_CASE<\/code>)<\/strong>: <code>const<\/code> ile tan\u0131mlanm\u0131\u015f, de\u011feri hi\u00e7 de\u011fi\u015fmeyecek ger\u00e7ek sabitler i\u00e7in kullan\u0131l\u0131r.\n<pre><code>\n      const MAX_OGRENCI_SAYISI = 30;\n      const API_KEY = \"abcxyz123\";\n    <\/pre>\n<p><\/code>\n  <\/li>\n<\/ol>\n<h3>Anla\u015f\u0131l\u0131r ve A\u00e7\u0131klay\u0131c\u0131 \u0130simler Kullanman\u0131n \u00d6nemi<\/h3>\n<p>\nDe\u011fi\u015fken isimleri, ne anlama geldiklerini ve ne i\u015fe yarad\u0131klar\u0131n\u0131 net bir \u015fekilde ifade etmelidir. K\u0131sa ama anlams\u0131z isimlerden ka\u00e7\u0131n\u0131lmal\u0131d\u0131r.\n<\/p>\n<ul>\n<li><strong>K\u00f6t\u00fc \u00d6rnek<\/strong>: <code>let x = 10;<\/code> (x neyi temsil ediyor?)<\/li>\n<li><strong>\u0130yi \u00d6rnek<\/strong>: <code>let ogrenciSayisi = 10;<\/code> (a\u00e7\u0131k\u00e7a \u00f6\u011frenci say\u0131s\u0131n\u0131 belirtiyor)<\/li>\n<li><strong>K\u00f6t\u00fc \u00d6rnek<\/strong>: <code>let data = fetch(&#039;...&#039;);<\/code> (hangi veri?)<\/li>\n<li><strong>\u0130yi \u00d6rnek<\/strong>: <code>let kullaniciVerileri = fetch(&#039;...&#039;);<\/code> (kullan\u0131c\u0131ya ait veriler)<\/li>\n<\/ul>\n<p>\nAyr\u0131ca, de\u011fi\u015fken isimlerinde \u0130ngilizce kelimeler kullanmak, uluslararas\u0131 projelerde veya tak\u0131m \u00e7al\u0131\u015fmalar\u0131nda daha yayg\u0131n ve tercih edilen bir yakla\u015f\u0131md\u0131r. Ancak, e\u011fer proje tamamen T\u00fcrk\u00e7e konu\u015fan bir ekip taraf\u0131ndan geli\u015ftiriliyorsa ve sadece bu ekibin kullan\u0131m\u0131na y\u00f6nelikse T\u00fcrk\u00e7e isimler de tercih edilebilir. \u00d6nemli olan, tutarl\u0131 olmakt\u0131r.\n<\/p>\n<p>\nSonu\u00e7 olarak, de\u011fi\u015fken isimlendirme, sadece kodun \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayan bir detay de\u011fil, ayn\u0131 zamanda kodun kalitesini, s\u00fcrd\u00fcr\u00fclebilirli\u011fini ve tak\u0131m i\u00e7inde i\u015fbirli\u011fini do\u011frudan etkileyen bir sanatt\u0131r. \u0130yi isimlendirilmi\u015f kod, kendi kendini belgeleyen kod olarak kabul edilir ve gelecekte zaman ve emekten tasarruf etmenizi sa\u011flar.\n<\/p>\n<h2>JavaScript'te De\u011fi\u015fkenlerin Kapsam\u0131 (Scope): Nerede Eri\u015febiliriz?<\/h2>\n<p>\nJavaScript'te de\u011fi\u015fkenlerin kapsam\u0131 veya \"scope\", bir de\u011fi\u015fkenin kodunuzun hangi b\u00f6l\u00fcmlerinden eri\u015filebilir oldu\u011funu belirleyen \u00f6nemli bir kavramd\u0131r. Kapsam kurallar\u0131, de\u011fi\u015fkenlerin ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc, \u00e7ak\u0131\u015fmalar\u0131 ve potansiyel hatalar\u0131 kontrol etmede kilit rol oynar. Do\u011fru kapsam y\u00f6netimi, kodunuzun daha g\u00fcvenli, d\u00fczenli ve \u00f6ng\u00f6r\u00fclebilir olmas\u0131n\u0131 sa\u011flar. JavaScript'te \u00fc\u00e7 ana scope t\u00fcr\u00fc vard\u0131r: Global scope, Function scope ve Block scope. Bu kapsamlar, <code>var<\/code>, <code>let<\/code> ve <code>const<\/code> anahtar kelimeleriyle tan\u0131mlanan de\u011fi\u015fkenlerin davran\u0131\u015flar\u0131n\u0131 do\u011frudan etkiler.\n<\/p>\n<h3>Global Scope: Her Yerden Eri\u015filebilir De\u011fi\u015fkenler<\/h3>\n<p>\nGlobal scope'ta tan\u0131mlanan de\u011fi\u015fkenler, JavaScript kodunun herhangi bir yerinden eri\u015filebilir. Bir de\u011fi\u015fkeni herhangi bir fonksiyonun veya blo\u011fun d\u0131\u015f\u0131nda tan\u0131mlad\u0131\u011f\u0131n\u0131zda, o de\u011fi\u015fken otomatik olarak global scope'a ait olur. Global de\u011fi\u015fkenler, uygulaman\u0131z\u0131n farkl\u0131 b\u00f6l\u00fcmleri aras\u0131nda veri payla\u015f\u0131m\u0131 i\u00e7in kullan\u0131\u015fl\u0131 olabilir, ancak ayn\u0131 zamanda dikkatli kullan\u0131lmad\u0131\u011f\u0131nda istenmeyen yan etkilere yol a\u00e7ma potansiyeli ta\u015f\u0131r. \u00c7ok say\u0131da global de\u011fi\u015fken kullanmak, isim \u00e7ak\u0131\u015fmalar\u0131na (naming collisions) ve kodun karma\u015f\u0131k hale gelmesine neden olabilir.\n<\/p>\n<pre><code>\n  let globalMesaj = \"Bu global bir mesajd\u0131r.\"; \/\/ Global scope\n\n  function birinciFonksiyon() {\n    console.log(globalMesaj); \/\/ Global de\u011fi\u015fkene eri\u015fim\n    globalMesaj = \"Mesaj birinci fonksiyonda de\u011fi\u015fti.\";\n  }\n\n  function ikinciFonksiyon() {\n    console.log(globalMesaj); \/\/ De\u011fi\u015fen global mesaj\u0131 g\u00f6r\u00fcr\n  }\n\n  birinciFonksiyon(); \/\/ Global mesaj\u0131 de\u011fi\u015ftirir\n  ikinciFonksiyon();  \/\/ \"Mesaj birinci fonksiyonda de\u011fi\u015fti.\" \u00e7\u0131kt\u0131s\u0131n\u0131 verir\n<\/pre>\n<p><\/code><\/p>\n<p>\nG\u00f6r\u00fcld\u00fc\u011f\u00fc gibi, <code>globalMesaj<\/code> de\u011fi\u015fkenine her iki fonksiyondan da eri\u015febildik ve hatta bir fonksiyondan de\u011fi\u015ftirdi\u011fimizde di\u011fer fonksiyon da bu de\u011fi\u015fikli\u011fi alg\u0131lad\u0131. Bu durumun faydalar\u0131 oldu\u011fu kadar, b\u00fcy\u00fck uygulamalarda hangi fonksiyonun hangi global de\u011fi\u015fkeni de\u011fi\u015ftirdi\u011fini takip etmenin zorla\u015fmas\u0131 gibi dezavantajlar\u0131 da vard\u0131r.\n<\/p>\n<h3>Function Scope: Fonksiyonlara \u00d6zel De\u011fi\u015fkenler (<code>var<\/code> ile)<\/h3>\n<p>\n<code>var<\/code> anahtar kelimesi ile tan\u0131mlanan de\u011fi\u015fkenler 'function scope'a sahiptir. Bu, bir <code>var<\/code> de\u011fi\u015fkeninin yaln\u0131zca tan\u0131mland\u0131\u011f\u0131 fonksiyon i\u00e7inde veya i\u00e7 i\u00e7e ge\u00e7mi\u015f fonksiyonlarda eri\u015filebilir oldu\u011fu anlam\u0131na gelir. Fonksiyon d\u0131\u015f\u0131ndan bu de\u011fi\u015fkenlere eri\u015fmeye \u00e7al\u0131\u015fmak bir referans hatas\u0131na (ReferenceError) yol a\u00e7ar. Bu, de\u011fi\u015fkenleri belirli bir i\u015flevsel birim i\u00e7inde izole etmenin ve isim \u00e7ak\u0131\u015fmalar\u0131n\u0131 azaltman\u0131n bir yoludur.\n<\/p>\n<pre><code>\n  function hesaplaToplam(s1, s2) {\n    var toplam = s1 + s2; \/\/ <code>toplam<\/code> function scope'ta\n    console.log(\"Fonksiyon i\u00e7inde toplam:\", toplam);\n  }\n\n  hesaplaToplam(5, 7); \/\/ \"Fonksiyon i\u00e7inde toplam: 12\"\n  \/\/ console.log(\"Fonksiyon d\u0131\u015f\u0131nda toplam:\", toplam); \/\/ Hata: toplam is not defined\n<\/pre>\n<p><\/code><\/p>\n<p>\nFunction scope, bir fonksiyonun kendi i\u00e7 i\u015fleyi\u015fini d\u0131\u015f d\u00fcnyadan korumak i\u00e7in do\u011fal bir mekanizma sa\u011flar. <code>toplam<\/code> de\u011fi\u015fkeni, <code>hesaplaToplam<\/code> fonksiyonunun d\u0131\u015f d\u00fcnyadan ba\u011f\u0131ms\u0131z \u00e7al\u0131\u015fmas\u0131n\u0131 garanti eder.\n<\/p>\n<h3>Block Scope: Modern ve Hassas Kontrol (<code>let<\/code> ve <code>const<\/code> ile)<\/h3>\n<p>\n<code>let<\/code> ve <code>const<\/code> anahtar kelimeleri, ES6 ile birlikte 'block scope' kavram\u0131n\u0131 getirmi\u015ftir. Block scope, s\u00fcsl\u00fc parantezlerle <code>{}<\/code> tan\u0131mlanan her blok i\u00e7in (\u00f6rne\u011fin <code>if<\/code> ifadeleri, <code>for<\/code> d\u00f6ng\u00fcleri, <code>while<\/code> d\u00f6ng\u00fcleri veya basit bir kod blo\u011fu) ayr\u0131 bir kapsam olu\u015fturur. <code>let<\/code> veya <code>const<\/code> ile tan\u0131mlanan de\u011fi\u015fkenler yaln\u0131zca o blo\u011fun i\u00e7inde ve alt bloklar\u0131nda eri\u015filebilir. Bu, de\u011fi\u015fkenlerin ya\u015fam s\u00fcresini \u00e7ok daha hassas bir \u015fekilde kontrol etmemizi sa\u011flar ve <code>var<\/code>'\u0131n neden oldu\u011fu bir\u00e7ok kapsam sorununu ortadan kald\u0131r\u0131r.\n<\/p>\n<pre><code>\n  if (true) {\n    let ad = \"Mehmet\"; \/\/ Block scope'ta\n    const soyad = \"Y\u0131lmaz\"; \/\/ Block scope'ta\n    var sehir = \"Ankara\"; \/\/ Function\/Global scope'ta (blok i\u00e7indeki var!)\n    console.log(ad, soyad, sehir); \/\/ Mehmet Y\u0131lmaz Ankara\n  }\n\n  \/\/ console.log(ad); \/\/ Hata: ad is not defined (blok d\u0131\u015f\u0131ndan eri\u015filemez)\n  \/\/ console.log(soyad); \/\/ Hata: soyad is not defined (blok d\u0131\u015f\u0131ndan eri\u015filemez)\n  console.log(sehir); \/\/ Ankara (var oldu\u011fu i\u00e7in blok d\u0131\u015f\u0131ndan eri\u015filebilir!)\n\n  for (let i = 0; i < 3; i++) {\n    \/\/ <code>i<\/code> her iterasyonda yeniden tan\u0131mlanmaz, ancak her d\u00f6ng\u00fc i\u00e7in ayr\u0131 bir <code>i<\/code> kapsam\u0131 olu\u015fur.\n    console.log(<code>D\u00f6ng\u00fc i\u00e7i i: ${i}<\/code>);\n  }\n  \/\/ console.log(i); \/\/ Hata: i is not defined (d\u00f6ng\u00fc blo\u011fu d\u0131\u015f\u0131ndan eri\u015filemez)\n<\/pre>\n<p><\/code><\/p>\n<p>\nBu \u00f6rnek, <code>let<\/code> ve <code>const<\/code>'un neden modern JavaScript'te tercih edildi\u011fini net bir \u015fekilde g\u00f6sterir. De\u011fi\u015fkenlerin belirli bir blokla s\u0131n\u0131rl\u0131 olmas\u0131, kodun daha \u00f6ng\u00f6r\u00fclebilir olmas\u0131n\u0131 ve istenmeyen yan etkilerin \u00f6n\u00fcne ge\u00e7ilmesini sa\u011flar. \u00d6zellikle d\u00f6ng\u00fclerde, <code>var<\/code> kullan\u0131ld\u0131\u011f\u0131nda olu\u015fan \"kapan\u0131\u015f sorunu\" (<code>closure issue<\/code>) <code>let<\/code> ile do\u011fal olarak \u00e7\u00f6z\u00fcl\u00fcr, \u00e7\u00fcnk\u00fc her d\u00f6ng\u00fc iterasyonu kendi <code>i<\/code> de\u011fi\u015fkenine sahip olur.\n<\/p>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: Kapsam hatalar\u0131n\u0131 \u00f6nlemek i\u00e7in m\u00fcmk\u00fcn oldu\u011funca dar kapsaml\u0131 de\u011fi\u015fkenler kullan\u0131n. Yani, bir de\u011fi\u015fkeni sadece ihtiya\u00e7 duyulan en k\u00fc\u00e7\u00fck blok i\u00e7inde tan\u0131mlay\u0131n. Bu, kodun bak\u0131m\u0131n\u0131 kolayla\u015ft\u0131r\u0131r, hata olas\u0131l\u0131\u011f\u0131n\u0131 azalt\u0131r ve kodun daha mod\u00fcler olmas\u0131n\u0131 sa\u011flar.\n<\/div>\n<h3>Vaka Analizi: Scope Hatalar\u0131n\u0131 \u00d6nleme<\/h3>\n<p>\nBir web uygulamas\u0131nda genellikle bir\u00e7ok fonksiyon ve blok bulunur. E\u011fer de\u011fi\u015fken kapsam\u0131n\u0131 do\u011fru anlamazsan\u0131z, kolayca hatalar yapabilirsiniz. \u00d6rne\u011fin, bir form g\u00f6nderimi i\u015fleyicisi yazd\u0131\u011f\u0131n\u0131z\u0131 varsayal\u0131m:\n<\/p>\n<pre><code>\n  let kullaniciVerisi = {}; \/\/ Global veya daha geni\u015f kapsaml\u0131 bir de\u011fi\u015fken\n\n  function formGonder() {\n    let inputAd = document.getElementById(\"ad\").value;\n    let inputEmail = document.getElementById(\"email\").value;\n\n    if (inputAd && inputEmail) {\n      kullaniciVerisi = {\n        ad: inputAd,\n        email: inputEmail\n      };\n      console.log(\"Form verileri kaydedildi:\", kullaniciVerisi);\n    } else {\n      console.log(\"L\u00fctfen t\u00fcm alanlar\u0131 doldurun.\");\n    }\n\n    \/\/ console.log(inputAd); \/\/ Bu sat\u0131r fonksiyonda oldu\u011fu i\u00e7in eri\u015filebilir\n  }\n  \/\/ console.log(inputAd); \/\/ Hata: inputAd is not defined (fonksiyon d\u0131\u015f\u0131ndan eri\u015filemez)\n<\/pre>\n<p><\/code><\/p>\n<p>\nBu senaryoda, <code>inputAd<\/code> ve <code>inputEmail<\/code> de\u011fi\u015fkenleri <code>formGonder<\/code> fonksiyonunun kapsam\u0131ndad\u0131r. Bu de\u011fi\u015fkenlere fonksiyon d\u0131\u015f\u0131ndan eri\u015fmeye \u00e7al\u0131\u015fmak hata verecektir, ki bu genellikle istenen davran\u0131\u015ft\u0131r. <code>kullaniciVerisi<\/code> ise daha geni\u015f bir kapsamda tan\u0131mlanarak farkl\u0131 fonksiyonlar\u0131n da bu verilere eri\u015fmesini sa\u011flar. Do\u011fru kapsam y\u00f6netimi sayesinde, farkl\u0131 fonksiyonlar\u0131n ayn\u0131 isimde de\u011fi\u015fkenleri kullanmas\u0131 durumunda bile \u00e7ak\u0131\u015fmalar\u0131n \u00f6n\u00fcne ge\u00e7ilir ve kodunuz daha g\u00fcvenli hale gelir.\n<\/p>\n<p>\n\u00d6zetle, JavaScript'te kapsam, de\u011fi\u015fkenlerin eri\u015filebilirli\u011fini ve ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc kontrol eden temel bir mekanizmad\u0131r. <code>var<\/code>, <code>let<\/code> ve <code>const<\/code> aras\u0131ndaki se\u00e7im, bu kapsam kurallar\u0131n\u0131 nas\u0131l uygulayaca\u011f\u0131n\u0131z\u0131 ve kodunuzun ne kadar g\u00fcvenli ve d\u00fczenli olaca\u011f\u0131n\u0131 do\u011frudan etkiler. Modern uygulamalarda, <code>let<\/code> ve <code>const<\/code> kullanarak block scope'un avantajlar\u0131ndan faydalanmak, daha temiz ve s\u00fcrd\u00fcr\u00fclebilir kod yazman\u0131n anahtar\u0131d\u0131r.\n<\/p>\n<h2>De\u011fi\u015fken T\u00fcrleri ve Tip D\u00f6n\u00fc\u015f\u00fcmleri Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h2>\n<p>\nJavaScript, 'dinamik tipli' bir dildir. Bu, bir de\u011fi\u015fken tan\u0131mlarken belirli bir veri tipi belirtmenize gerek olmad\u0131\u011f\u0131 anlam\u0131na gelir. JavaScript motoru, de\u011fi\u015fkene atanan de\u011fere g\u00f6re otomatik olarak veri tipini belirler. Ayr\u0131ca, ayn\u0131 de\u011fi\u015fken, program\u0131n farkl\u0131 noktalar\u0131nda farkl\u0131 tiplerde de\u011ferler alabilir. Bu esneklik, h\u0131zl\u0131 geli\u015ftirmeye olanak tan\u0131rken, tip d\u00f6n\u00fc\u015f\u00fcmlerini ve farkl\u0131 veri tiplerini anlamay\u0131 kritik hale getirir. JavaScript'te temelde iki t\u00fcr veri tipi kategorisi bulunur: ilkel (primitive) tipler ve ilkel olmayan (non-primitive) tipler.\n<\/p>\n<h3>\u0130lkel (Primitive) Veri Tipleri<\/h3>\n<p>\n\u0130lkel tipler, basit ve tek bir de\u011fer depolayan tiplerdir. Bir de\u011fi\u015fkene ilkel bir de\u011fer atand\u0131\u011f\u0131nda, de\u011ferin kendisi kopyalan\u0131r.\n<\/p>\n<ul>\n<li><strong>String (Metin)<\/strong>: T\u0131rnak i\u015faretleri (<code>&#039;&#039;<\/code> veya <code>\"\"<\/code>) aras\u0131na yaz\u0131lan metinlerdir.\n<pre><code>\n      let ad = \"Can\";\n      let selam = 'Merhaba D\u00fcnya!';\n    <\/pre>\n<p><\/code>\n  <\/li>\n<li><strong>Number (Say\u0131)<\/strong>: Hem tam say\u0131lar\u0131 hem de ondal\u0131kl\u0131 say\u0131lar\u0131 kapsar.\n<pre><code>\n      let yas = 30;\n      let pi = 3.14;\n    <\/pre>\n<p><\/code>\n  <\/li>\n<li><strong>Boolean (Mant\u0131ksal)<\/strong>: Sadece <code>true<\/code> (do\u011fru) veya <code>false<\/code> (yanl\u0131\u015f) de\u011ferlerini alabilen tiplerdir. Ko\u015fullu ifadelerde s\u0131k\u00e7a kullan\u0131l\u0131r.\n<pre><code>\n      let yetkiliMi = true;\n      let aktifMi = false;\n    <\/pre>\n<p><\/code>\n  <\/li>\n<li><strong>Undefined (Tan\u0131ms\u0131z)<\/strong>: Bir de\u011fi\u015fken tan\u0131mland\u0131\u011f\u0131nda ancak ona herhangi bir de\u011fer atanmad\u0131\u011f\u0131nda otomatik olarak ald\u0131\u011f\u0131 tiptir. Ayr\u0131ca bir fonksiyondan bir de\u011fer d\u00f6nd\u00fcr\u00fclmedi\u011finde de bu tip de\u011fer d\u00f6ner.\n<pre><code>\n      let tanimsizDegisken; \/\/ de\u011feri undefined\n      console.log(tanimsizDegisken); \/\/ undefined\n    <\/pre>\n<p><\/code>\n  <\/li>\n<li><strong>Null (Bo\u015f)<\/strong>: Bilerek atanm\u0131\u015f \"de\u011fer yok\" anlam\u0131na gelen \u00f6zel bir tiptir. <code>undefined<\/code>'dan farkl\u0131 olarak, <code>null<\/code> bir geli\u015ftirici taraf\u0131ndan bilin\u00e7li olarak atan\u0131r.\n<pre><code>\n      let bosDeger = null;\n      console.log(bosDeger); \/\/ null\n    <\/pre>\n<p><\/code>\n  <\/li>\n<li><strong>Symbol (Sembol)<\/strong>: ES6 ile tan\u0131t\u0131lm\u0131\u015f benzersiz ve de\u011fi\u015ftirilemez bir de\u011fer olu\u015fturmak i\u00e7in kullan\u0131l\u0131r. Nesne \u00f6zelliklerinin \u00e7ak\u0131\u015fmas\u0131n\u0131 \u00f6nlemek i\u00e7in idealdir.\n<pre><code>\n      const id = Symbol('kimlik');\n      const id2 = Symbol('kimlik');\n      console.log(id === id2); \/\/ false (her Symbol benzersizdir)\n    <\/pre>\n<p><\/code>\n  <\/li>\n<li><strong>BigInt (B\u00fcy\u00fck Tam Say\u0131)<\/strong>: ES2020 ile gelmi\u015f olup, Number tipinin ifade edebilece\u011fi en b\u00fcy\u00fck tam say\u0131dan (2<sup>53<\/sup> - 1) daha b\u00fcy\u00fck tam say\u0131lar\u0131 temsil etmek i\u00e7in kullan\u0131l\u0131r. <code>n<\/code> son eki ile tan\u0131mlan\u0131r.\n<pre><code>\n      let buyukSayi = 9007199254740991n; \/\/ 'n' ile BigInt olarak tan\u0131mlan\u0131r\n    <\/pre>\n<p><\/code>\n  <\/li>\n<\/ul>\n<h3>\u0130lkel Olmayan (Non-Primitive) Veri Tipleri<\/h3>\n<p>\n\u0130lkel olmayan tipler, birden fazla de\u011feri veya daha karma\u015f\u0131k yap\u0131lar\u0131 depolayabilen tiplerdir. Bir de\u011fi\u015fkene ilkel olmayan bir de\u011fer atand\u0131\u011f\u0131nda, de\u011ferin kendisi yerine bellekteki referans\u0131 kopyalan\u0131r.\n<\/p>\n<ul>\n<li><strong>Object (Nesne)<\/strong>: JavaScript'teki hemen hemen her \u015fey (diziler, fonksiyonlar dahil) nesnedir. Key-value \u00e7iftlerinden olu\u015fan bir koleksiyondur.\n<pre><code>\n      let kullanici = {\n        ad: \"Zeynep\",\n        yas: 28,\n        email: \"zeynep@example.com\"\n      };\n    <\/pre>\n<p><\/code>\n  <\/li>\n<li><strong>Array (Dizi)<\/strong>: S\u0131ral\u0131 bir veri koleksiyonudur ve nesnelerin \u00f6zel bir t\u00fcr\u00fcd\u00fcr.\n<pre><code>\n      let renkler = [\"k\u0131rm\u0131z\u0131\", \"ye\u015fil\", \"mavi\"];\n    <\/pre>\n<p><\/code>\n  <\/li>\n<li><strong>Function (Fonksiyon)<\/strong>: \u00c7al\u0131\u015ft\u0131r\u0131labilir kod bloklar\u0131d\u0131r ve JavaScript'te \"first-class citizens\" olarak kabul edilirler, yani de\u011fi\u015fkenlere atanabilir, arg\u00fcman olarak ge\u00e7irilebilir ve fonksiyonlardan d\u00f6nd\u00fcr\u00fclebilirler.\n<pre><code>\n      function selamVer() {\n        console.log(\"Merhaba!\");\n      }\n    <\/pre>\n<p><\/code>\n  <\/li>\n<\/ul>\n<h3>Tip D\u00f6n\u00fc\u015f\u00fcmleri (Type Coercion)<\/h3>\n<p>\nJavaScript'in dinamik tipli do\u011fas\u0131, \u00e7o\u011fu zaman tip d\u00f6n\u00fc\u015f\u00fcmlerini beraberinde getirir. Tip d\u00f6n\u00fc\u015f\u00fcm\u00fc, bir veri tipinin ba\u015fka bir veri tipine d\u00f6n\u00fc\u015ft\u00fcr\u00fclmesi i\u015flemidir. Bu d\u00f6n\u00fc\u015f\u00fcmler iki \u015fekilde ger\u00e7ekle\u015febilir:\n<\/p>\n<ol>\n<li><strong>Implicit (Otomatik) Tip D\u00f6n\u00fc\u015f\u00fcm\u00fc<\/strong>: JavaScript motorunun otomatik olarak ger\u00e7ekle\u015ftirdi\u011fi d\u00f6n\u00fc\u015f\u00fcmlerdir. Genellikle operat\u00f6rler veya fonksiyonlar farkl\u0131 tiplerdeki de\u011ferlerle kar\u015f\u0131la\u015ft\u0131\u011f\u0131nda tetiklenir.\n<pre><code>\n      let sayi = 5;\n      let metin = \"10\";\n      let sonuc = sayi + metin; \/\/ '510' (say\u0131 string'e d\u00f6n\u00fc\u015f\u00fcr ve birle\u015ftirme yap\u0131l\u0131r)\n      console.log(typeof sonuc); \/\/ string\n\n      let bool = true;\n      let num = 1;\n      let sonuc2 = bool + num; \/\/ 2 (true, 1'e d\u00f6n\u00fc\u015f\u00fcr)\n      console.log(sonuc2);\n\n      let strSayi = \"20\";\n      let bolum = strSayi \/ 2; \/\/ 10 (string, say\u0131ya d\u00f6n\u00fc\u015f\u00fcr ve b\u00f6lme yap\u0131l\u0131r)\n      console.log(bolum);\n    <\/pre>\n<p><\/code><\/p>\n<p>\n      Bu otomatik d\u00f6n\u00fc\u015f\u00fcmler bazen kafa kar\u0131\u015ft\u0131r\u0131c\u0131 olabilir ve beklenmedik sonu\u00e7lara yol a\u00e7abilir. \u00d6zellikle <code>+<\/code> operat\u00f6r\u00fc hem say\u0131sal toplama hem de string birle\u015ftirme yapabildi\u011fi i\u00e7in dikkatli olunmal\u0131d\u0131r.\n    <\/p>\n<\/li>\n<li><strong>Explicit (A\u00e7\u0131k) Tip D\u00f6n\u00fc\u015f\u00fcm\u00fc<\/strong>: Geli\u015ftiricinin bilin\u00e7li olarak bir tipi ba\u015fka bir tipe d\u00f6n\u00fc\u015ft\u00fcrmesidir. Bunun i\u00e7in \u00e7e\u015fitli global fonksiyonlar veya metotlar kullan\u0131l\u0131r.\n<ul>\n<li><strong>String'e D\u00f6n\u00fc\u015ft\u00fcrme<\/strong>:\n<pre><code>\n          let numToString = String(123); \/\/ \"123\"\n          let boolToString = (true).toString(); \/\/ \"true\"\n        <\/pre>\n<p><\/code>\n      <\/li>\n<li><strong>Number'a D\u00f6n\u00fc\u015ft\u00fcrme<\/strong>:\n<pre><code>\n          let strToNum = Number(\"456\"); \/\/ 456\n          let strToInt = parseInt(\"789.5\"); \/\/ 789\n          let strToFloat = parseFloat(\"12.34\"); \/\/ 12.34\n          \/\/ Bo\u015f string veya sadece bo\u015fluk i\u00e7eren string 0'a, di\u011fer ge\u00e7ersiz stringler NaN'a (Not-a-Number) d\u00f6n\u00fc\u015f\u00fcr.\n          console.log(Number(\"\")); \/\/ 0\n          console.log(Number(\"merhaba\")); \/\/ NaN\n        <\/pre>\n<p><\/code>\n      <\/li>\n<li><strong>Boolean'a D\u00f6n\u00fc\u015ft\u00fcrme<\/strong>:\n<pre><code>\n          let numToBool = Boolean(0); \/\/ false (0, null, undefined, \"\", NaN false'a d\u00f6n\u00fc\u015f\u00fcr)\n          let strToBool = Boolean(\"hello\"); \/\/ true (bo\u015f olmayan stringler true'ya d\u00f6n\u00fc\u015f\u00fcr)\n          let objToBool = Boolean({}); \/\/ true (bo\u015f nesneler ve diziler de true'dur)\n        <\/pre>\n<p><\/code>\n      <\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\nTip d\u00f6n\u00fc\u015f\u00fcmlerini anlamak ve gerekti\u011finde a\u00e7\u0131k d\u00f6n\u00fc\u015f\u00fcmleri kullanmak, JavaScript kodunuzu daha sa\u011flam ve g\u00fcvenilir hale getirir. Otomatik d\u00f6n\u00fc\u015f\u00fcmlerin sebep olabilece\u011fi s\u00fcrprizlerden ka\u00e7\u0131nmak i\u00e7in, \u00f6zellikle matematiksel i\u015flemler veya kar\u015f\u0131la\u015ft\u0131rmalar yaparken veri tiplerinden emin olmak ve gerekirse a\u00e7\u0131k\u00e7a d\u00f6n\u00fc\u015ft\u00fcrmek en iyi uygulamad\u0131r. \u00d6rne\u011fin, kullan\u0131c\u0131dan al\u0131nan girdiler her zaman string olarak gelir, bu y\u00fczden say\u0131sal i\u015flem yapmadan \u00f6nce <code>Number()<\/code> veya <code>parseInt()<\/code> ile say\u0131ya d\u00f6n\u00fc\u015ft\u00fcrmek g\u00fcvenli bir yakla\u015f\u0131md\u0131r.\n<\/p>\n<h2>Ger\u00e7ek D\u00fcnya Senaryolar\u0131nda JavaScript De\u011fi\u015fken Kullan\u0131m\u0131: Bir Vaka Analizi<\/h2>\n<p>\nDe\u011fi\u015fkenlerin teorik bilgilerini \u00f6\u011frendikten sonra, bu bilgileri ger\u00e7ek bir senaryoda nas\u0131l uygulayaca\u011f\u0131m\u0131z\u0131 g\u00f6rmek, konuyu peki\u015ftirmenin en iyi yoludur. Basit bir interaktif al\u0131\u015fveri\u015f sepeti uygulamas\u0131n\u0131n temelini atarak, <code>var<\/code>, <code>let<\/code>, <code>const<\/code> ve farkl\u0131 veri tiplerinin pratikte nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131 inceleyelim. Bu vaka analizi, ayn\u0131 zamanda mobil uyumlu bir HTML yap\u0131s\u0131n\u0131n de\u011fi\u015fkenlerle nas\u0131l etkile\u015fim kurdu\u011funu da g\u00f6sterecektir.\n<\/p>\n<h3>Senaryo: Basit Bir Al\u0131\u015fveri\u015f Sepeti Uygulamas\u0131<\/h3>\n<p>\nBir e-ticaret sitesinde, kullan\u0131c\u0131lar\u0131n \u00fcr\u00fcnleri sepete ekleyebilece\u011fi, miktar\u0131n\u0131 de\u011fi\u015ftirebilece\u011fi ve toplam tutar\u0131 g\u00f6rebilece\u011fi basit bir al\u0131\u015fveri\u015f sepeti mod\u00fcl\u00fc geli\u015ftirece\u011fiz. Bu mod\u00fclde, \u00fcr\u00fcn bilgileri, sepet durumu ve kullan\u0131c\u0131 etkile\u015fimleri i\u00e7in de\u011fi\u015fkenleri etkin bir \u015fekilde kullanaca\u011f\u0131z.\n<\/p>\n<h4>1. Sabit De\u011ferler (<code>const<\/code> ile)<\/h4>\n<p>\nUygulamam\u0131zda baz\u0131 de\u011ferler sabit kalacak. \u00d6rne\u011fin, KDV oran\u0131 veya \u00fcr\u00fcnlerin ba\u015flang\u0131\u00e7 fiyatlar\u0131. Bu t\u00fcr de\u011ferler i\u00e7in <code>const<\/code> kullanmak, onlar\u0131n yanl\u0131\u015fl\u0131kla de\u011fi\u015ftirilmesini engeller ve kodun g\u00fcvenli\u011fini art\u0131r\u0131r.\n<\/p>\n<pre><code>\n  const KDV_ORANI = 0.18; \/\/ %18 KDV oran\u0131, de\u011feri de\u011fi\u015fmeyecek\n  const FIYAT_KALEM_1 = 120.00; \/\/ \u0130lk \u00fcr\u00fcn\u00fcn sabit fiyat\u0131\n  const FIYAT_KALEM_2 = 75.50;  \/\/ \u0130kinci \u00fcr\u00fcn\u00fcn sabit fiyat\u0131\n  const PARA_BIRIMI = \"TL\";   \/\/ Para birimi\n<\/pre>\n<p><\/code><\/p>\n<p>\nBurada <code>KDV_ORANI<\/code>, <code>FIYAT_KALEM_1<\/code>, <code>FIYAT_KALEM_2<\/code> ve <code>PARA_BIRIMI<\/code> gibi de\u011ferler uygulaman\u0131n \u00f6mr\u00fc boyunca sabit kalacakt\u0131r. <code>const<\/code> kullanmak, hem geli\u015ftiriciye bu de\u011ferlerin niyetini a\u00e7\u0131k\u00e7a belirtir hem de JavaScript motorunun bu de\u011fi\u015fkenleri optimize etmesine yard\u0131mc\u0131 olabilir.\n<\/p>\n<h4>2. De\u011fi\u015fken De\u011ferler (<code>let<\/code> ile)<\/h4>\n<p>\nSepetteki \u00fcr\u00fcn miktar\u0131, toplam sepet tutar\u0131 veya kullan\u0131c\u0131 taraf\u0131ndan girilen indirim kodu gibi de\u011ferler uygulama i\u00e7inde s\u00fcrekli de\u011fi\u015febilir. Bu t\u00fcr dinamik de\u011ferler i\u00e7in <code>let<\/code> kullanmak en uygun yakla\u015f\u0131md\u0131r.\n<\/p>\n<pre><code>\n  let urun1Miktari = 0; \/\/ Ba\u015flang\u0131\u00e7ta 0 adet\n  let urun2Miktari = 0; \/\/ Ba\u015flang\u0131\u00e7ta 0 adet\n  let toplamSepetTutari = 0;\n  let indirimKodu = \"\"; \/\/ Kullan\u0131c\u0131n\u0131n girebilece\u011fi indirim kodu\n  let uygulanacakIndirimOrani = 0; \/\/ Varsay\u0131lan indirim yok\n<\/pre>\n<p><\/code><\/p>\n<p>\nKullan\u0131c\u0131 \"Sepete Ekle\" butonuna t\u0131klad\u0131k\u00e7a <code>urun1Miktari<\/code> veya <code>urun2Miktari<\/code> de\u011fi\u015fkenleri art\u0131r\u0131lacak, bu da <code>toplamSepetTutari<\/code>'n\u0131 g\u00fcncelleyecektir. \u00d6rne\u011fin:\n<\/p>\n<pre><code>\n  function urun1AdetArtir() {\n    urun1Miktari++; \/\/ Miktar\u0131 art\u0131r\n    sepetiGuncelle();\n  }\n\n  function urun2AdetAzalt() {\n    if (urun2Miktari > 0) {\n      urun2Miktari--; \/\/ Miktar\u0131 azalt\n      sepetiGuncelle();\n    }\n  }\n\n  function sepetiGuncelle() {\n    let brutToplam = (urun1Miktari * FIYAT_KALEM_1) + (urun2Miktari * FIYAT_KALEM_2);\n    let kdvTutari = brutToplam * KDV_ORANI;\n    let indirimTutari = brutToplam * uygulanacakIndirimOrani;\n    toplamSepetTutari = brutToplam + kdvTutari - indirimTutari;\n\n    \/\/ Aray\u00fcz\u00fc g\u00fcncelleme (\u00f6rne\u011fin HTML elementlerinin i\u00e7eri\u011fini de\u011fi\u015ftirme)\n    document.getElementById(\"urun1-miktar\").innerText = urun1Miktari;\n    document.getElementById(\"urun2-miktar\").innerText = urun2Miktari;\n    document.getElementById(\"toplam-tutar\").innerText = toplamSepetTutari.toFixed(2) + \" \" + PARA_BIRIMI;\n  }\n\n  \/\/ \u00d6rne\u011fin, bir indirim kodu uyguland\u0131\u011f\u0131nda\n  function indirimUygula(kod) {\n    if (kod === \"YAZINDIRIMI\") {\n      uygulanacakIndirimOrani = 0.10; \/\/ %10 indirim\n      indirimKodu = kod;\n      console.log(\"YAZINDIRIMI uyguland\u0131!\");\n    } else {\n      uygulanacakIndirimOrani = 0;\n      indirimKodu = \"\";\n      console.log(\"Ge\u00e7ersiz indirim kodu.\");\n    }\n    sepetiGuncelle();\n  }\n<\/pre>\n<p><\/code><\/p>\n<p>\nBu \u00f6rnekte, <code>let<\/code> ile tan\u0131mlanan de\u011fi\u015fkenlerin de\u011ferleri, kullan\u0131c\u0131 etkile\u015fimlerine ve uygulama mant\u0131\u011f\u0131na g\u00f6re dinamik olarak g\u00fcncellenmektedir. Fonksiyonlar i\u00e7indeki <code>brutToplam<\/code>, <code>kdvTutari<\/code>, <code>indirimTutari<\/code> gibi ge\u00e7ici hesaplama de\u011fi\u015fkenleri de <code>let<\/code> ile tan\u0131mlan\u0131r, \u00e7\u00fcnk\u00fc bunlar sadece o fonksiyonun y\u00fcr\u00fct\u00fclmesi s\u0131ras\u0131nda ge\u00e7erlidir ve de\u011ferleri hesaplama s\u00fcrecinde de\u011fi\u015febilir.\n<\/p>\n<h4>3. HTML Yap\u0131s\u0131 ve Mobil Uyumluluk<\/h4>\n<p>\nBu de\u011fi\u015fkenleri g\u00f6steren ve kullan\u0131c\u0131 etkile\u015fimini sa\u011flayan HTML yap\u0131s\u0131 da \u00f6nemlidir. De\u011fi\u015fkenler, genellikle DOM (Document Object Model) elementlerinin i\u00e7eri\u011fini veya \u00f6zelliklerini dinamik olarak de\u011fi\u015ftirmek i\u00e7in kullan\u0131l\u0131r. Modern web geli\u015ftirme, mobil uyumlu (responsive) tasar\u0131ma \u00f6nem verir. HTML yap\u0131n\u0131z\u0131 mobil cihazlarda da iyi g\u00f6r\u00fcnecek \u015fekilde tasarlarken, JavaScript de\u011fi\u015fkenlerinizin do\u011frudan bir etkisi olmasa da, onlar\u0131n DOM manip\u00fclasyonlar\u0131 arac\u0131l\u0131\u011f\u0131yla i\u00e7eri\u011fi dinamik olarak nas\u0131l g\u00fcncelledi\u011fi, kullan\u0131c\u0131 deneyimini etkiler. \u00d6rne\u011fin, <code>sepetiGuncelle()<\/code> fonksiyonu, <code>document.getElementById(\"toplam-tutar\").innerText<\/code> gibi y\u00f6ntemlerle HTML elementlerinin i\u00e7eri\u011fini g\u00fcnceller. HTML yap\u0131s\u0131n\u0131 mobil uyumlu \u015fekilde olu\u015fturarak (\u00f6rne\u011fin, esnek kutular <code>flexbox<\/code> veya \u0131zgara <code>grid<\/code> kullanarak), JavaScript ile g\u00fcncellenen i\u00e7eri\u011fin farkl\u0131 ekran boyutlar\u0131nda sorunsuz g\u00f6r\u00fcnmesini sa\u011flayabiliriz.\n<\/p>\n<pre><code class=\"language-html\">\n  <div class=\"sepet-modulu\">\n    <h2>Al\u0131\u015fveri\u015f Sepeti<\/h2>\n\n    <div class=\"urun-satiri\">\n      <span class=\"urun-ad\">\u00dcr\u00fcn 1 (Fiyat: 120.00 TL)<\/span>\n      <span>Miktar: <span id=\"urun1-miktar\">0<\/span><\/span>\n      <button onclick=\"urun1AdetArtir()\">+<\/button>\n    <\/div>\n\n    <div class=\"urun-satiri\">\n      <span class=\"urun-ad\">\u00dcr\u00fcn 2 (Fiyat: 75.50 TL)<\/span>\n      <span>Miktar: <span id=\"urun2-miktar\">0<\/span><\/span>\n      <button onclick=\"urun2AdetAzalt()\">-<\/button>\n    <\/div>\n\n    <div class=\"sepet-ozet\">\n      <p>Toplam Tutar: <span id=\"toplam-tutar\">0.00 TL<\/span><\/p>\n    <\/div>\n\n    <div class=\"indirim-alani\">\n      <input type=\"text\" id=\"indirimKoduInput\" placeholder=\"\u0130ndirim Kodu Girin\">\n      <button onclick=\"indirimUygula(document.getElementById('indirimKoduInput').value)\">Uygula<\/button>\n    <\/div>\n  <\/div>\n\n  <!-- Bu HTML, uygun CSS media query'leri ile mobil uyumlu hale getirilebilir. -->\n  <!-- \u00d6rne\u011fin: -->\n  <!-- @media (max-width: 600px) { -->\n  <!--   .urun-satiri { flex-direction: column; } -->\n  <!-- } -->\n<\/pre>\n<p><\/code><\/p>\n<p>\nBu vaka analizi, <code>const<\/code> ve <code>let<\/code> de\u011fi\u015fkenlerinin bir araya gelerek nas\u0131l dinamik ve i\u015flevsel bir web uygulamas\u0131 olu\u015fturabildi\u011fini g\u00f6stermektedir. <code>const<\/code>, tahmin edilebilir ve g\u00fcvenli sabitler sa\u011flarken, <code>let<\/code> kullan\u0131c\u0131n\u0131n etkile\u015fimlerine g\u00f6re de\u011fi\u015fen uygulama durumunu y\u00f6netir. Bu yap\u0131, kodun okunabilirli\u011fini, bak\u0131m\u0131n\u0131 ve hata ay\u0131klamas\u0131n\u0131 kolayla\u015ft\u0131r\u0131r. <code>var<\/code> ise bu modern yakla\u015f\u0131mlarda nadiren tercih edilir, \u00e7\u00fcnk\u00fc sundu\u011fu kapsam kurallar\u0131, genellikle karma\u015f\u0131k uygulamalarda beklenmeyen davran\u0131\u015flara yol a\u00e7abilir.\n<\/p>\n<h2>\u0130leri D\u00fczey De\u011fi\u015fken Y\u00f6netimi \u0130pu\u00e7lar\u0131 ve P\u00fcf Noktalar\u0131 Nelerdir?<\/h2>\n<p>\nJavaScript'te de\u011fi\u015fkenlerin temellerini ve <code>var<\/code>, <code>let<\/code>, <code>const<\/code> farklar\u0131n\u0131 anlad\u0131ktan sonra, kodunuzu daha verimli, okunabilir ve s\u00fcrd\u00fcr\u00fclebilir hale getirecek baz\u0131 ileri d\u00fczey de\u011fi\u015fken y\u00f6netimi tekniklerine ge\u00e7ebiliriz. Bu ipu\u00e7lar\u0131, \u00f6zellikle b\u00fcy\u00fck \u00f6l\u00e7ekli uygulamalar geli\u015ftirirken veya daha karma\u015f\u0131k veri yap\u0131lar\u0131yla \u00e7al\u0131\u015f\u0131rken size yard\u0131mc\u0131 olacakt\u0131r.\n<\/p>\n<h3>1. Destructuring Assignment (Yap\u0131 Bozma Atamas\u0131)<\/h3>\n<p>\nDestructuring, ES6 ile gelen g\u00fc\u00e7l\u00fc bir \u00f6zelliktir. Dizilerden veya nesnelerden veri ay\u0131klaman\u0131n ve bunlar\u0131 ayr\u0131 de\u011fi\u015fkenlere ataman\u0131n daha k\u0131sa ve okunakl\u0131 bir yolunu sunar. Bu, \u00f6zellikle bir fonksiyondan d\u00f6nen bir nesneden belirli \u00f6zelliklere veya bir diziden belirli elemanlara eri\u015fmek istedi\u011finizde \u00e7ok kullan\u0131\u015fl\u0131d\u0131r.\n<\/p>\n<pre><code>\n  \/\/ Nesne Destructuring\n  const kullaniciBilgisi = {\n    ad: \"Elif\",\n    soyad: \"Demir\",\n    yas: 29,\n    adres: {\n      il: \"\u0130stanbul\",\n      ilce: \"Kad\u0131k\u00f6y\"\n    }\n  };\n\n  \/\/ Eskiden:\n  \/\/ const ad = kullaniciBilgisi.ad;\n  \/\/ const yas = kullaniciBilgisi.yas;\n\n  \/\/ Destructuring ile:\n  const { ad, yas, email = \"bilgi@yok.com\" } = kullaniciBilgisi; \/\/ email i\u00e7in varsay\u0131lan de\u011fer\n  console.log(ad, yas, email); \/\/ Elif 29 bilgi@yok.com\n\n  \/\/ \u0130\u00e7 i\u00e7e nesneler i\u00e7in destructuring:\n  const { adres: { il, ilce } } = kullaniciBilgisi;\n  console.log(il, ilce); \/\/ \u0130stanbul Kad\u0131k\u00f6y\n\n  \/\/ Dizi Destructuring\n  const renkler = [\"k\u0131rm\u0131z\u0131\", \"ye\u015fil\", \"mavi\"];\n\n  \/\/ Eskiden:\n  \/\/ const birinciRenk = renkler[0];\n  \/\/ const ikinciRenk = renkler[1];\n\n  \/\/ Destructuring ile:\n  const [birinciRenk, ikinciRenk, ucuncuRenk] = renkler;\n  console.log(birinciRenk, ikinciRenk, ucuncuRenk); \/\/ k\u0131rm\u0131z\u0131 ye\u015fil mavi\n\n  \/\/ Belirli elemanlar\u0131 atlama veya kalanlar\u0131 alma (rest operator ile)\n  const [ilk, , ucuncu, ...kalanlar] = [\"a\", \"b\", \"c\", \"d\", \"e\"];\n  console.log(ilk, ucuncu, kalanlar); \/\/ a c [\"d\", \"e\"]\n<\/pre>\n<p><\/code><\/p>\n<p>\nDestructuring, kodun daha derli toplu ve ne yapt\u0131\u011f\u0131n\u0131 a\u00e7\u0131k\u00e7a g\u00f6steren bir yap\u0131ya sahip olmas\u0131n\u0131 sa\u011flar.\n<\/p>\n<h3>2. Spread (...) ve Rest (...) Operat\u00f6r\u00fc ile De\u011fi\u015fken Y\u00f6netimi<\/h3>\n<p>\nES6 ile tan\u0131t\u0131lan Spread ve Rest operat\u00f6rleri, diziler ve nesnelerle \u00e7al\u0131\u015f\u0131rken de\u011fi\u015fken y\u00f6netimini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde basitle\u015ftirir.\n<\/p>\n<ul>\n<li><strong>Spread Operat\u00f6r\u00fc (<code>...<\/code>)<\/strong>: Bir diziyi veya nesneyi \"yayarak\" elemanlar\u0131n\u0131 veya \u00f6zelliklerini ba\u015fka bir diziye\/nesneye kopyalamaya veya bir fonksiyonun arg\u00fcman listesine geni\u015fletmeye yarar.\n<pre><code>\n      const arr1 = [1, 2, 3];\n      const arr2 = [4, 5, 6];\n      const birlesikDizi = [...arr1, ...arr2]; \/\/ [1, 2, 3, 4, 5, 6]\n\n      const obj1 = { a: 1, b: 2 };\n      const obj2 = { c: 3, d: 4 };\n      const birlesikNesne = { ...obj1, ...obj2 }; \/\/ { a: 1, b: 2, c: 3, d: 4 }\n\n      \/\/ Bir nesneyi kopyalay\u0131p yeni \u00f6zellik eklemek veya de\u011fi\u015ftirmek:\n      const orijinalAyarlar = { tema: \"dark\", dil: \"tr\" };\n      const yeniAyarlar = { ...orijinalAyarlar, tema: \"light\", bildirimler: true };\n      \/\/ { tema: \"light\", dil: \"tr\", bildirimler: true }\n    <\/pre>\n<p><\/code>\n  <\/li>\n<li><strong>Rest Operat\u00f6r\u00fc (<code>...<\/code>)<\/strong>: Bir fonksiyona ge\u00e7irilen kalan t\u00fcm arg\u00fcmanlar\u0131 bir diziye toplamak veya bir nesneden baz\u0131 \u00f6zellikleri ay\u0131klay\u0131p kalanlar\u0131 yeni bir nesneye toplamak i\u00e7in kullan\u0131l\u0131r. Destructuring ile kar\u0131\u015ft\u0131r\u0131lmamal\u0131d\u0131r, kullan\u0131ld\u0131\u011f\u0131 yere g\u00f6re anlam\u0131 de\u011fi\u015fir.\n<pre><code>\n      \/\/ Fonksiyon arg\u00fcmanlar\u0131nda Rest\n      function topla(ilkSayi, ...digerSayilar) { \/\/ di\u011ferSayilar bir dizi olacak\n        return ilkSayi + digerSayilar.reduce((acc, current) => acc + current, 0);\n      }\n      console.log(topla(1, 2, 3, 4)); \/\/ 10 (ilkSayi=1, digerSayilar=[2,3,4])\n\n      \/\/ Nesne Destructuring ile Rest\n      const { ad, ...kalanOzellikler } = kullaniciBilgisi;\n      console.log(ad, kalanOzellikler); \/\/ Elif { soyad: \"Demir\", yas: 29, adres: { il: \"\u0130stanbul\", ilce: \"Kad\u0131k\u00f6y\" } }\n    <\/pre>\n<p><\/code>\n  <\/li>\n<\/ul>\n<p>\nBu operat\u00f6rler, dizileri ve nesneleri manip\u00fcle etmeyi \u00e7ok daha esnek ve okunakl\u0131 hale getirir.\n<\/p>\n<h3>3. Global De\u011fi\u015fkenlerden Ka\u00e7\u0131nma (Side Effects)<\/h3>\n<p>\nDaha \u00f6nce bahsetti\u011fimiz gibi, global de\u011fi\u015fkenler kodun herhangi bir yerinden eri\u015filebilir ve de\u011fi\u015ftirilebilir. Bu durum, \"side effect\" ad\u0131 verilen yan etkilere yol a\u00e7abilir. Yani, bir fonksiyonun global bir de\u011fi\u015fkeni beklenmedik bir \u015fekilde de\u011fi\u015ftirmesi, uygulaman\u0131z\u0131n ba\u015fka bir yerinde hatalara neden olabilir. M\u00fcmk\u00fcn oldu\u011funca de\u011fi\u015fkenleri yerel scope'larda (block veya function scope) tutmaya \u00e7al\u0131\u015f\u0131n. Bu, kodun daha mod\u00fcler, test edilebilir ve izole olmas\u0131n\u0131 sa\u011flar.\n<\/p>\n<pre><code>\n  \/\/ K\u00f6t\u00fc pratik: Global bir saya\u00e7\n  let sayac = 0; \/\/ Global de\u011fi\u015fken\n\n  function artir() {\n    sayac++; \/\/ Global de\u011fi\u015fkeni de\u011fi\u015ftiriyor (side effect)\n  }\n\n  artir();\n  artir();\n  console.log(sayac); \/\/ 2\n\n  \/\/ Daha iyi pratik: Yerel scope ve parametreler\n  function artirGuvenli(mevcutSayac) {\n    return mevcutSayac + 1; \/\/ Yeni bir de\u011fer d\u00f6nd\u00fcr, d\u0131\u015far\u0131y\u0131 etkileme\n  }\n\n  let yeniSayac = 0;\n  yeniSayac = artirGuvenli(yeniSayac);\n  yeniSayac = artirGuvenli(yeniSayac);\n  console.log(yeniSayac); \/\/ 2\n<\/pre>\n<p><\/code><\/p>\n<h3>4. Hoisting'in Dikkat Edilmesi Gereken Yanlar\u0131<\/h3>\n<p>\n<code>var<\/code> ile tan\u0131mlanan de\u011fi\u015fkenler ve fonksiyon bildirimleri, kapsamlar\u0131n\u0131n en \u00fcst\u00fcne ta\u015f\u0131n\u0131r (hoisting). Ancak <code>let<\/code> ve <code>const<\/code> da teknik olarak hoisting'e tabidir, sadece 'Temporal Dead Zone (TDZ)' nedeniyle tan\u0131mlanmadan \u00f6nce eri\u015filemezler. Bu, kodunuzu yazarken de\u011fi\u015fkenlerin nerede tan\u0131mland\u0131\u011f\u0131na dikkat etmeniz gerekti\u011fi anlam\u0131na gelir. Genellikle, t\u00fcm de\u011fi\u015fken tan\u0131mlamalar\u0131n\u0131 (\u00f6zellikle <code>let<\/code> ve <code>const<\/code> ile) ilgili scope'un en ba\u015f\u0131nda yapmak iyi bir uygulamad\u0131r, bu da kodun okunabilirli\u011fini art\u0131r\u0131r ve TDZ ile ilgili hatalar\u0131 \u00f6nler.\n<\/p>\n<h3>5. <code>use strict<\/code> Kullan\u0131m\u0131<\/h3>\n<p>\nModern JavaScript'te <code>use strict<\/code> direktifi, kodunuzu \"kat\u0131 modda\" \u00e7al\u0131\u015ft\u0131rman\u0131z\u0131 sa\u011flar. Bu, JavaScript motorunun baz\u0131 \"gev\u015fek\" veya \"sessiz\" hatalar\u0131 (\u00f6rne\u011fin, tan\u0131mlanmam\u0131\u015f bir de\u011fi\u015fkene de\u011fer atamak gibi) hata olarak ele almas\u0131n\u0131 sa\u011flar. <code>use strict<\/code>'i bir dosyan\u0131n veya fonksiyonun en ba\u015f\u0131na eklemek, daha g\u00fcvenli ve hata ay\u0131klamas\u0131 kolay kod yazman\u0131za yard\u0131mc\u0131 olur. \u00d6zellikle de\u011fi\u015fkenlerin yanl\u0131\u015fl\u0131kla global scope'a s\u0131zmas\u0131n\u0131 engellemeye yard\u0131mc\u0131 olur.\n<\/p>\n<pre><code>\n  \"use strict\"; \/\/ Dosyan\u0131n veya fonksiyonun ba\u015f\u0131nda\n  \/\/ degisken = 10; \/\/ Hata: 'degisken' tan\u0131mlanmam\u0131\u015f\n  let degisken = 10; \/\/ Do\u011fru kullan\u0131m\n<\/pre>\n<p><\/code><\/p>\n<p>\nBu ileri d\u00fczey ipu\u00e7lar\u0131 ve p\u00fcf noktalar\u0131, de\u011fi\u015fkenleri sadece depolama arac\u0131 olarak g\u00f6rmekten \u00f6teye ge\u00e7menizi, onlar\u0131 kodunuzun mimarisini \u015fekillendiren g\u00fc\u00e7l\u00fc ara\u00e7lar olarak kullanman\u0131z\u0131 sa\u011flar. Temiz kod, g\u00fcvenilir kod demektir ve bu teknikler, bu hedefe ula\u015fman\u0131za yard\u0131mc\u0131 olacakt\u0131r.\n<\/p>\n<h2>Sonu\u00e7: JavaScript Programlamas\u0131nda De\u011fi\u015fkenlerin Rol\u00fc<\/h2>\n<p>\nBu kapsaml\u0131 makalede, JavaScript de\u011fi\u015fkenlerinin neden bir program\u0131n temel ta\u015f\u0131 oldu\u011funu, <code>var<\/code>, <code>let<\/code> ve <code>const<\/code> anahtar kelimelerinin alt\u0131nda yatan farklar\u0131 ve bu farklar\u0131n kodunuzun kapsam (scope) \u00fczerindeki etkilerini ayr\u0131nt\u0131l\u0131 bir \u015fekilde inceledik. G\u00f6rd\u00fck ki, de\u011fi\u015fkenler sadece veriyi depolayan kutular de\u011fil, ayn\u0131 zamanda kodun ak\u0131\u015f\u0131n\u0131, okunabilirli\u011fini, bak\u0131m\u0131n\u0131 ve g\u00fcvenilirli\u011fini do\u011frudan etkileyen kritik unsurlard\u0131r. <code>const<\/code> ile sabit de\u011ferleri, <code>let<\/code> ile dinamik olarak de\u011fi\u015fen de\u011ferleri y\u00f6netmek, modern JavaScript geli\u015ftirme prati\u011finin vazge\u00e7ilmez bir par\u00e7as\u0131 haline gelmi\u015ftir. <code>var<\/code> ise, yerini daha g\u00fcvenli ve \u00f6ng\u00f6r\u00fclebilir <code>let<\/code> ve <code>const<\/code>'a b\u0131rakm\u0131\u015ft\u0131r.\n<\/p>\n<p>\nDe\u011fi\u015fken isimlendirme kurallar\u0131na uymak ve anlaml\u0131 isimler kullanmak, kodunuzun kendi kendini belgeleyen bir yap\u0131ya sahip olmas\u0131n\u0131 sa\u011flar. Kapsam (global, function, block) kurallar\u0131n\u0131 iyi anlamak, \u00f6zellikle b\u00fcy\u00fck uygulamalarda ortaya \u00e7\u0131kabilecek beklenmedik hatalar\u0131 ve yan etkileri \u00f6nlemenin anahtar\u0131d\u0131r. Ayr\u0131ca, JavaScript'in dinamik tipli yap\u0131s\u0131n\u0131 ve tip d\u00f6n\u00fc\u015f\u00fcmlerini kavramak, veri manip\u00fclasyonunda kar\u015f\u0131la\u015fabilece\u011finiz s\u00fcrprizleri en aza indirir. Son olarak, destructuring assignment, spread\/rest operat\u00f6rleri gibi ileri d\u00fczey teknikler ve global de\u011fi\u015fkenlerden ka\u00e7\u0131nma prensibi, daha temiz, daha esnek ve daha s\u00fcrd\u00fcr\u00fclebilir JavaScript kodu yazman\u0131z\u0131 sa\u011flayacakt\u0131r. Unutmay\u0131n, iyi y\u00f6netilmi\u015f de\u011fi\u015fkenler, hatas\u0131z ve g\u00fc\u00e7l\u00fc uygulamalar geli\u015ftirmenin temelini olu\u015fturur. Bu bilgileri prati\u011fe d\u00f6kerek JavaScript'teki yetkinli\u011finizi art\u0131rmaya devam edin!\n<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p><strong>1. <code>var<\/code> anahtar kelimesini hala kullanmal\u0131 m\u0131y\u0131m?<\/strong><\/p>\n<p>Modern JavaScript geli\u015ftirme pratiklerinde <code>var<\/code> kullanmak genellikle tavsiye edilmez. <code>var<\/code>'\u0131n function scope'u ve hoisting davran\u0131\u015f\u0131, beklenmedik hatalara ve kod karma\u015f\u0131kl\u0131\u011f\u0131na yol a\u00e7abilir. Bunun yerine, de\u011ferini de\u011fi\u015ftiremeyece\u011finiz durumlarda <code>const<\/code>, de\u011fi\u015ftirebilece\u011finiz durumlarda ise <code>let<\/code> kullanman\u0131z \u00f6nerilir. Bu yakla\u015f\u0131m, kodunuzu daha g\u00fcvenli, \u00f6ng\u00f6r\u00fclebilir ve okunabilir k\u0131lar.<\/p>\n<p><strong>2. <code>const<\/code> ile tan\u0131mlanm\u0131\u015f bir obje veya dizi tamamen de\u011fi\u015ftirilemez mi yapar?<\/strong><\/p>\n<p>Hay\u0131r, <code>const<\/code> bir objeyi veya diziyi tamamen de\u011fi\u015ftirilemez yapmaz. <code>const<\/code>, sadece de\u011fi\u015fkenin *referans\u0131n\u0131n* sabit kalmas\u0131n\u0131 sa\u011flar. Yani, o de\u011fi\u015fkene ba\u015fka bir obje veya dizi *yeniden atayamazs\u0131n\u0131z*. Ancak, objenin i\u00e7indeki \u00f6zelliklerini de\u011fi\u015ftirebilir veya dizinin elemanlar\u0131n\u0131 ekleyebilir\/silebilirsiniz, \u00e7\u00fcnk\u00fc objenin\/dizinin kendisi (bellekteki adresi) de\u011fi\u015fmez, sadece i\u00e7eri\u011fi de\u011fi\u015fir.<\/p>\n<p><strong>3. De\u011fi\u015fkenleri tan\u0131mlarken her zaman bir de\u011fer atamak zorunda m\u0131y\u0131m?<\/strong><\/p>\n<p><code>var<\/code> ve <code>let<\/code> ile de\u011fi\u015fken tan\u0131mlarken ilk anda bir de\u011fer atamak zorunda de\u011filsiniz. E\u011fer bir de\u011fer atanmazsa, de\u011fi\u015fkenin de\u011feri otomatik olarak <code>undefined<\/code> olur. Ancak, <code>const<\/code> ile bir de\u011fi\u015fken tan\u0131mlad\u0131\u011f\u0131n\u0131zda, o anda bir de\u011fer ataman\u0131z zorunludur. Aksi takdirde bir <code>SyntaxError<\/code> hatas\u0131 al\u0131rs\u0131n\u0131z, \u00e7\u00fcnk\u00fc <code>const<\/code> sabit bir referans sa\u011flamay\u0131 ama\u00e7lar ve ba\u015flang\u0131\u00e7ta bir de\u011fere sahip olmas\u0131 gerekir.<\/p>\n<p><strong>4. Hoisting nedir ve neden \u00f6nemlidir?<\/strong><\/p>\n<p>Hoisting, JavaScript'in de\u011fi\u015fken ve fonksiyon bildirimlerini (tan\u0131mlamalar\u0131n\u0131) kapsay\u0131c\u0131 scope'lar\u0131n\u0131n en \u00fcst\u00fcne ta\u015f\u0131mas\u0131 davran\u0131\u015f\u0131d\u0131r. <code>var<\/code> ile tan\u0131mlanan de\u011fi\u015fkenlerin sadece bildirimleri ta\u015f\u0131n\u0131r ve ba\u015flang\u0131\u00e7 de\u011feri <code>undefined<\/code> olur. <code>let<\/code> ve <code>const<\/code> da hoisting'e tabidir, ancak Temporal Dead Zone (TDZ) ad\u0131 verilen bir mekanizma nedeniyle, tan\u0131mlanmadan \u00f6nce eri\u015filmeye \u00e7al\u0131\u015f\u0131l\u0131rsa hata f\u0131rlat\u0131rlar. Hoisting, kodunuzu yazarken de\u011fi\u015fkenlerin s\u0131ras\u0131na dikkat etmenizi gerektirdi\u011fi i\u00e7in \u00f6nemlidir; aksi takdirde beklenmedik <code>undefined<\/code> de\u011ferleriyle veya <code>ReferenceError<\/code> hatalar\u0131yla kar\u015f\u0131la\u015fabilirsiniz.<\/p>\n<p><strong>5. Global de\u011fi\u015fkenler neden k\u00f6t\u00fc kabul edilir?<\/strong><\/p>\n<p>Global de\u011fi\u015fkenler, kodunuzun herhangi bir yerinden eri\u015filebilir ve de\u011fi\u015ftirilebilir olduklar\u0131 i\u00e7in genellikle k\u00f6t\u00fc bir pratik olarak kabul edilirler. Bunun ba\u015fl\u0131ca nedenleri \u015funlard\u0131r: isim \u00e7ak\u0131\u015fmalar\u0131 (farkl\u0131 kod par\u00e7alar\u0131 ayn\u0131 isimde global de\u011fi\u015fkenler tan\u0131mlayabilir), ba\u011f\u0131ml\u0131l\u0131k y\u00f6netimi (hangi fonksiyonun hangi global de\u011fi\u015fkeni kulland\u0131\u011f\u0131n\u0131\/de\u011fi\u015ftirdi\u011fini anlamak zorla\u015f\u0131r), ve yan etkiler (bir fonksiyonun global bir de\u011fi\u015fkeni de\u011fi\u015ftirmesi, uygulaman\u0131n ba\u015fka bir yerinde beklenmedik davran\u0131\u015flara neden olabilir). M\u00fcmk\u00fcn oldu\u011funca de\u011fi\u015fkenleri dar kapsaml\u0131 (yerel veya block scope) tutmak, kodunuzu daha mod\u00fcler, test edilebilir ve s\u00fcrd\u00fcr\u00fclebilir k\u0131lar.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"JavaScript De\u011fi\u015fkenler: Programlaman\u0131n Temel Ta\u015f\u0131 JavaScript de\u011fi\u015fkenleri, modern web uygulamalar\u0131n\u0131n ve programlama mant\u0131\u011f\u0131n\u0131n temel yap\u0131 ta\u015flar\u0131ndan biridir. Kodunuzda&hellip;","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-30776","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 De\u011fi\u015fkenleri Neden Bu Kadar \u00d6nemli?<\/title>\n<meta name=\"description\" content=\"JavaScript de\u011fi\u015fkenleri, modern web uygulamalar\u0131n\u0131n ve programlama mant\u0131\u011f\u0131n\u0131n temel yap\u0131 ta\u015flar\u0131ndan biridir. Kodunuzda ge\u00e7ici veya kal\u0131c\u0131 olarak bilgi depolaman\u0131n ve bu bilgilere eri\u015fmenin anahtar mekanizmas\u0131d\u0131r. Bu kapsaml\u0131 rehberde, `var`, `let`, `const` gibi de\u011fi\u015fken tan\u0131mlama y\u00f6ntemleri aras\u0131ndaki kritik farklar\u0131, kullan\u0131m alanlar\u0131n\u0131 ve en iyi uygulamalar\u0131 derinlemesine inceleyece\u011fiz. B\u00f6ylece, programlama ser\u00fcveninize sa\u011flam bir ba\u015flang\u0131\u00e7 yapacak ve JavaScript&#039;in veri y\u00f6netimi yeteneklerini tam anlam\u0131yla kavrayacaks\u0131n\u0131z.\" \/>\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-degiskenleri-neden-bu-kadar-onemli\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JavaScript De\u011fi\u015fkenleri Neden Bu Kadar \u00d6nemli?\" \/>\n<meta property=\"og:description\" content=\"JavaScript de\u011fi\u015fkenleri, modern web uygulamalar\u0131n\u0131n ve programlama mant\u0131\u011f\u0131n\u0131n temel yap\u0131 ta\u015flar\u0131ndan biridir. Kodunuzda ge\u00e7ici veya kal\u0131c\u0131 olarak bilgi depolaman\u0131n ve bu bilgilere eri\u015fmenin anahtar mekanizmas\u0131d\u0131r. Bu kapsaml\u0131 rehberde, `var`, `let`, `const` gibi de\u011fi\u015fken tan\u0131mlama y\u00f6ntemleri aras\u0131ndaki kritik farklar\u0131, kullan\u0131m alanlar\u0131n\u0131 ve en iyi uygulamalar\u0131 derinlemesine inceleyece\u011fiz. B\u00f6ylece, programlama ser\u00fcveninize sa\u011flam bir ba\u015flang\u0131\u00e7 yapacak ve JavaScript&#039;in veri y\u00f6netimi yeteneklerini tam anlam\u0131yla kavrayacaks\u0131n\u0131z.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/javascript-degiskenleri-neden-bu-kadar-onemli\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-01T22:02:14+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=\"35 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-degiskenleri-neden-bu-kadar-onemli\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-degiskenleri-neden-bu-kadar-onemli\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"JavaScript De\u011fi\u015fkenleri Neden Bu Kadar \u00d6nemli?\",\"datePublished\":\"2025-10-01T22:02:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-degiskenleri-neden-bu-kadar-onemli\/\"},\"wordCount\":5515,\"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-degiskenleri-neden-bu-kadar-onemli\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-degiskenleri-neden-bu-kadar-onemli\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/javascript-degiskenleri-neden-bu-kadar-onemli\/\",\"name\":\"JavaScript De\u011fi\u015fkenleri Neden Bu Kadar \u00d6nemli?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-01T22:02:14+00:00\",\"description\":\"JavaScript de\u011fi\u015fkenleri, modern web uygulamalar\u0131n\u0131n ve programlama mant\u0131\u011f\u0131n\u0131n temel yap\u0131 ta\u015flar\u0131ndan biridir. Kodunuzda ge\u00e7ici veya kal\u0131c\u0131 olarak bilgi depolaman\u0131n ve bu bilgilere eri\u015fmenin anahtar mekanizmas\u0131d\u0131r. Bu kapsaml\u0131 rehberde, `var`, `let`, `const` gibi de\u011fi\u015fken tan\u0131mlama y\u00f6ntemleri aras\u0131ndaki kritik farklar\u0131, kullan\u0131m alanlar\u0131n\u0131 ve en iyi uygulamalar\u0131 derinlemesine inceleyece\u011fiz. B\u00f6ylece, programlama ser\u00fcveninize sa\u011flam bir ba\u015flang\u0131\u00e7 yapacak ve JavaScript'in veri y\u00f6netimi yeteneklerini tam anlam\u0131yla kavrayacaks\u0131n\u0131z.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-degiskenleri-neden-bu-kadar-onemli\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/javascript-degiskenleri-neden-bu-kadar-onemli\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-degiskenleri-neden-bu-kadar-onemli\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JavaScript De\u011fi\u015fkenleri Neden Bu Kadar \u00d6nemli?\"}]},{\"@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 De\u011fi\u015fkenleri Neden Bu Kadar \u00d6nemli?","description":"JavaScript de\u011fi\u015fkenleri, modern web uygulamalar\u0131n\u0131n ve programlama mant\u0131\u011f\u0131n\u0131n temel yap\u0131 ta\u015flar\u0131ndan biridir. Kodunuzda ge\u00e7ici veya kal\u0131c\u0131 olarak bilgi depolaman\u0131n ve bu bilgilere eri\u015fmenin anahtar mekanizmas\u0131d\u0131r. Bu kapsaml\u0131 rehberde, `var`, `let`, `const` gibi de\u011fi\u015fken tan\u0131mlama y\u00f6ntemleri aras\u0131ndaki kritik farklar\u0131, kullan\u0131m alanlar\u0131n\u0131 ve en iyi uygulamalar\u0131 derinlemesine inceleyece\u011fiz. B\u00f6ylece, programlama ser\u00fcveninize sa\u011flam bir ba\u015flang\u0131\u00e7 yapacak ve JavaScript'in veri y\u00f6netimi yeteneklerini tam anlam\u0131yla kavrayacaks\u0131n\u0131z.","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-degiskenleri-neden-bu-kadar-onemli\/","og_locale":"tr_TR","og_type":"article","og_title":"JavaScript De\u011fi\u015fkenleri Neden Bu Kadar \u00d6nemli?","og_description":"JavaScript de\u011fi\u015fkenleri, modern web uygulamalar\u0131n\u0131n ve programlama mant\u0131\u011f\u0131n\u0131n temel yap\u0131 ta\u015flar\u0131ndan biridir. Kodunuzda ge\u00e7ici veya kal\u0131c\u0131 olarak bilgi depolaman\u0131n ve bu bilgilere eri\u015fmenin anahtar mekanizmas\u0131d\u0131r. Bu kapsaml\u0131 rehberde, `var`, `let`, `const` gibi de\u011fi\u015fken tan\u0131mlama y\u00f6ntemleri aras\u0131ndaki kritik farklar\u0131, kullan\u0131m alanlar\u0131n\u0131 ve en iyi uygulamalar\u0131 derinlemesine inceleyece\u011fiz. B\u00f6ylece, programlama ser\u00fcveninize sa\u011flam bir ba\u015flang\u0131\u00e7 yapacak ve JavaScript'in veri y\u00f6netimi yeteneklerini tam anlam\u0131yla kavrayacaks\u0131n\u0131z.","og_url":"https:\/\/fatihsoysal.com\/blog\/javascript-degiskenleri-neden-bu-kadar-onemli\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-01T22:02:14+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"35 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/javascript-degiskenleri-neden-bu-kadar-onemli\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascript-degiskenleri-neden-bu-kadar-onemli\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"JavaScript De\u011fi\u015fkenleri Neden Bu Kadar \u00d6nemli?","datePublished":"2025-10-01T22:02:14+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascript-degiskenleri-neden-bu-kadar-onemli\/"},"wordCount":5515,"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-degiskenleri-neden-bu-kadar-onemli\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/javascript-degiskenleri-neden-bu-kadar-onemli\/","url":"https:\/\/fatihsoysal.com\/blog\/javascript-degiskenleri-neden-bu-kadar-onemli\/","name":"JavaScript De\u011fi\u015fkenleri Neden Bu Kadar \u00d6nemli?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-01T22:02:14+00:00","description":"JavaScript de\u011fi\u015fkenleri, modern web uygulamalar\u0131n\u0131n ve programlama mant\u0131\u011f\u0131n\u0131n temel yap\u0131 ta\u015flar\u0131ndan biridir. Kodunuzda ge\u00e7ici veya kal\u0131c\u0131 olarak bilgi depolaman\u0131n ve bu bilgilere eri\u015fmenin anahtar mekanizmas\u0131d\u0131r. Bu kapsaml\u0131 rehberde, `var`, `let`, `const` gibi de\u011fi\u015fken tan\u0131mlama y\u00f6ntemleri aras\u0131ndaki kritik farklar\u0131, kullan\u0131m alanlar\u0131n\u0131 ve en iyi uygulamalar\u0131 derinlemesine inceleyece\u011fiz. B\u00f6ylece, programlama ser\u00fcveninize sa\u011flam bir ba\u015flang\u0131\u00e7 yapacak ve JavaScript'in veri y\u00f6netimi yeteneklerini tam anlam\u0131yla kavrayacaks\u0131n\u0131z.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascript-degiskenleri-neden-bu-kadar-onemli\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/javascript-degiskenleri-neden-bu-kadar-onemli\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/javascript-degiskenleri-neden-bu-kadar-onemli\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"JavaScript De\u011fi\u015fkenleri Neden Bu Kadar \u00d6nemli?"}]},{"@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\/30776","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=30776"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30776\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=30776"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=30776"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=30776"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}