{"id":35409,"date":"2025-11-29T09:40:44","date_gmt":"2025-11-29T06:40:44","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=35409"},"modified":"2025-11-29T09:40:44","modified_gmt":"2025-11-29T06:40:44","slug":"javascriptte-arrow-fonksiyonlarini-anlamak-kapsamli-bir-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/javascriptte-arrow-fonksiyonlarini-anlamak-kapsamli-bir-rehber\/","title":{"rendered":"JavaScript&#8217;te Arrow Fonksiyonlar\u0131n\u0131 Anlamak: Kapsaml\u0131 Bir Rehber"},"content":{"rendered":"<p><body><\/p>\n<h2>JavaScript&#8217;te Arrow Fonksiyonlar\u0131n\u0131 Anlamak: Kapsaml\u0131 Bir Rehber<\/h2>\n<h3>Giri\u015f: Arrow Fonksiyonlar\u0131 Nedir ve Neden \u00d6nemlidir?<\/h3>\n<p>JavaScript, s\u00fcrekli geli\u015fen ve yeni \u00f6zelliklerle zenginle\u015fen dinamik bir dildir. ECMAScript 2015 (ES6) ile tan\u0131t\u0131lan en \u00f6nemli ve pop\u00fcler \u00f6zelliklerden biri de &#8220;Arrow Fonksiyonlar\u0131&#8221;d\u0131r. Geleneksel fonksiyon ifadelerine (function expressions) g\u00f6re daha k\u0131sa ve s\u00f6zdizimsel olarak daha temiz bir yaz\u0131m sunan arrow fonksiyonlar\u0131, modern JavaScript geli\u015ftirmenin vazge\u00e7ilmez bir par\u00e7as\u0131 haline gelmi\u015ftir. Ancak, sadece k\u0131sa yaz\u0131m avantaj\u0131yla kalmay\u0131p, \u00f6zellikle <code>this<\/code> anahtar kelimesinin nas\u0131l davrand\u0131\u011f\u0131 konusunda geleneksel fonksiyonlardan \u00f6nemli \u00f6l\u00e7\u00fcde farkl\u0131l\u0131k g\u00f6sterirler. Bu farkl\u0131l\u0131k, \u00e7o\u011fu geli\u015ftiricinin arrow fonksiyonlar\u0131n\u0131 anlamas\u0131nda kilit bir rol oynar ve do\u011fru kullan\u0131ld\u0131\u011f\u0131nda kodun okunabilirli\u011fini ve bak\u0131m\u0131n\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde iyile\u015ftirir.<\/p>\n<p>Bu makalede, arrow fonksiyonlar\u0131n\u0131n temel s\u00f6zdiziminden ba\u015flayarak, farkl\u0131 kullan\u0131m durumlar\u0131n\u0131, geleneksel fonksiyonlarla aras\u0131ndaki temel farklar\u0131 (\u00f6zellikle <code>this<\/code> ba\u011flam\u0131 a\u00e7\u0131s\u0131ndan), avantajlar\u0131n\u0131, dezavantajlar\u0131n\u0131 ve ne zaman kullan\u0131lmas\u0131 gerekti\u011fini ayr\u0131nt\u0131l\u0131 bir \u015fekilde inceleyece\u011fiz. Amac\u0131m\u0131z, arrow fonksiyonlar\u0131n\u0131n sadece bir &#8220;s\u00f6zdizimsel \u015feker&#8221;den ibaret olmad\u0131\u011f\u0131n\u0131, ayn\u0131 zamanda JavaScript&#8217;in temel \u00e7al\u0131\u015fma prensiplerine derinlemesine bir bak\u0131\u015f a\u00e7\u0131s\u0131 sunan g\u00fc\u00e7l\u00fc bir ara\u00e7 oldu\u011funu g\u00f6stermektir.<\/p>\n<h3>Arrow Fonksiyonlar\u0131n\u0131n Temel S\u00f6zdizimi<\/h3>\n<p>Arrow fonksiyonlar\u0131n\u0131n s\u00f6zdizimi, geleneksel fonksiyonlara g\u00f6re olduk\u00e7a basittir ve birka\u00e7 farkl\u0131 varyasyonu bulunur. Temel yap\u0131 <code>parametreler => ifade<\/code> veya <code>parametreler => { g\u00f6vde }<\/code> \u015feklindedir.<\/p>\n<h4>Parametresiz Arrow Fonksiyonlar\u0131<\/h4>\n<p>Hi\u00e7bir parametre almayan arrow fonksiyonlar\u0131, bo\u015f parantezler kullan\u0131larak tan\u0131mlan\u0131r:<\/p>\n<pre><code class=\"language-javascript\">\/\/ Geleneksel fonksiyon\nconst greetOld = function() {\n  return \"Merhaba d\u00fcnya!\";\n};\nconsole.log(greetOld()); \/\/ Merhaba d\u00fcnya!\n\n\/\/ Arrow fonksiyonu\nconst greetNew = () => {\n  return \"Merhaba d\u00fcnya!\";\n};\nconsole.log(greetNew()); \/\/ Merhaba d\u00fcnya!<\/code><\/pre>\n<p>E\u011fer fonksiyon g\u00f6vdesi tek bir ifadeden olu\u015fuyorsa ve bu ifadenin de\u011feri do\u011frudan d\u00f6nd\u00fcr\u00fclecekse, s\u00fcsl\u00fc parantezlere ve <code>return<\/code> anahtar kelimesine gerek kalmaz. Bu duruma &#8220;\u00f6rt\u00fck d\u00f6n\u00fc\u015f&#8221; (implicit return) denir:<\/p>\n<pre><code class=\"language-javascript\">const greetShort = () => \"Merhaba d\u00fcnya!\";\nconsole.log(greetShort()); \/\/ Merhaba d\u00fcnya!<\/code><\/pre>\n<h4>Tek Parametreli Arrow Fonksiyonlar\u0131<\/h4>\n<p>Tek bir parametre alan arrow fonksiyonlar\u0131nda, parametre parantezleri iste\u011fe ba\u011fl\u0131d\u0131r. Genellikle parantez kullan\u0131lmaz.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Geleneksel fonksiyon\nconst squareOld = function(x) {\n  return x * x;\n};\nconsole.log(squareOld(5)); \/\/ 25\n\n\/\/ Arrow fonksiyonu (parantezli parametre)\nconst squareNew = (x) => {\n  return x * x;\n};\nconsole.log(squareNew(5)); \/\/ 25\n\n\/\/ Arrow fonksiyonu (parantezsiz parametre ve \u00f6rt\u00fck d\u00f6n\u00fc\u015f)\nconst squareShort = x => x * x;\nconsole.log(squareShort(5)); \/\/ 25<\/code><\/pre>\n<h4>Birden Fazla Parametreli Arrow Fonksiyonlar\u0131<\/h4>\n<p>Birden fazla parametre alan arrow fonksiyonlar\u0131nda, parametrelerin parantez i\u00e7inde belirtilmesi zorunludur.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Geleneksel fonksiyon\nconst addOld = function(a, b) {\n  return a + b;\n};\nconsole.log(addOld(3, 7)); \/\/ 10\n\n\/\/ Arrow fonksiyonu (parantezli parametreler ve \u00f6rt\u00fck d\u00f6n\u00fc\u015f)\nconst addNew = (a, b) => a + b;\nconsole.log(addNew(3, 7)); \/\/ 10<\/code><\/pre>\n<h4>Obje Literali D\u00f6nd\u00fcrme<\/h4>\n<p>E\u011fer bir arrow fonksiyonu do\u011frudan bir obje literalini d\u00f6nd\u00fcrecekse, objeyi \u00e7evreleyen parantezlerin i\u00e7ine alman\u0131z gerekir. Aksi takdirde, JavaScript s\u00fcsl\u00fc parantezleri bir fonksiyon blo\u011fu olarak yorumlar ve beklenen objeyi d\u00f6nd\u00fcrmez.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Yanl\u0131\u015f kullan\u0131m (fonksiyon blo\u011fu olarak yorumlan\u0131r)\n\/\/ const createPersonWrong = (name, age) => { name: name, age: age }; \/\/ SyntaxError veya undefined d\u00f6ner\n\/\/ console.log(createPersonWrong(\"Alice\", 30));\n\n\/\/ Do\u011fru kullan\u0131m (parantez i\u00e7i obje literal)\nconst createPerson = (name, age) => ({ name: name, age: age });\nconsole.log(createPerson(\"Alice\", 30)); \/\/ { name: 'Alice', age: 30 }<\/code><\/pre>\n<h4>\u00c7ok Sat\u0131rl\u0131 Fonksiyon G\u00f6vdeleri<\/h4>\n<p>E\u011fer fonksiyon g\u00f6vdesi birden fazla ifade i\u00e7eriyorsa veya karma\u015f\u0131k bir mant\u0131k y\u00fcr\u00fct\u00fcyorsa, s\u00fcsl\u00fc parantezler ve <code>return<\/code> anahtar kelimesi zorunludur.<\/p>\n<pre><code class=\"language-javascript\">const calculateTax = (price, taxRate) => {\n  const taxAmount = price * taxRate;\n  const totalPrice = price + taxAmount;\n  return totalPrice;\n};\nconsole.log(calculateTax(100, 0.18)); \/\/ 118<\/code><\/pre>\n<h3>Arrow Fonksiyonlar\u0131n\u0131n \u00c7e\u015fitli Kullan\u0131m Durumlar\u0131<\/h3>\n<p>Arrow fonksiyonlar\u0131, k\u0131sa ve temiz s\u00f6zdizimleri sayesinde bir\u00e7ok senaryoda geleneksel fonksiyonlara tercih edilir. \u00d6zellikle callback fonksiyonlar\u0131 olarak kullan\u0131ld\u0131klar\u0131nda kodun okunabilirli\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131rlar.<\/p>\n<h4>Callback Fonksiyonlar\u0131 Olarak Kullan\u0131m<\/h4>\n<p>Arrow fonksiyonlar\u0131, dizilerle \u00e7al\u0131\u015fan y\u00fcksek mertebeden fonksiyonlar (higher-order functions) gibi callback alan yerlerde parlar:<\/p>\n<p>*   <strong><code>Array.prototype.map()<\/code>:<\/strong> Bir dizinin her eleman\u0131 \u00fczerinde i\u015flem yap\u0131p yeni bir dizi d\u00f6nd\u00fcrmek i\u00e7in.<\/p>\n<pre><code class=\"language-javascript\">const numbers = [1, 2, 3, 4, 5];\n    const doubled = numbers.map(num => num * 2);\n    console.log(doubled); \/\/ [2, 4, 6, 8, 10]<\/code><\/pre>\n<p>*   <strong><code>Array.prototype.filter()<\/code>:<\/strong> Bir dizi i\u00e7indeki belirli ko\u015fullar\u0131 sa\u011flayan elemanlar\u0131 filtrelemek i\u00e7in.<\/p>\n<pre><code class=\"language-javascript\">const evens = numbers.filter(num => num % 2 === 0);\n    console.log(evens); \/\/ [2, 4]<\/code><\/pre>\n<p>*   <strong><code>Array.prototype.reduce()<\/code>:<\/strong> Bir dizinin elemanlar\u0131n\u0131 tek bir de\u011fere indirgemek i\u00e7in.<\/p>\n<pre><code class=\"language-javascript\">const sum = numbers.reduce((acc, num) => acc + num, 0);\n    console.log(sum); \/\/ 15<\/code><\/pre>\n<p>*   <strong><code>Array.prototype.forEach()<\/code>:<\/strong> Bir dizinin her eleman\u0131 \u00fczerinde yan etki yaratmak i\u00e7in.<\/p>\n<pre><code class=\"language-javascript\">numbers.forEach(num => console.log(num));\n    \/\/ \u00c7\u0131kt\u0131: 1, 2, 3, 4, 5 (her biri ayr\u0131 sat\u0131rda)<\/code><\/pre>\n<p>*   <strong>Zamanlay\u0131c\u0131 Fonksiyonlar\u0131 (<code>setTimeout<\/code>, <code>setInterval<\/code>):<\/strong> Gecikmeli veya tekrarlayan i\u015flemler i\u00e7in.<\/p>\n<pre><code class=\"language-javascript\">setTimeout(() => console.log(\"Bu mesaj 1 saniye sonra g\u00f6r\u00fcnecek.\"), 1000);<\/code><\/pre>\n<p>*   <strong>Promise Zincirleri:<\/strong> Asenkron i\u015flemlerin sonu\u00e7lar\u0131n\u0131 i\u015flemek i\u00e7in <code>.then()<\/code> ve <code>.catch()<\/code> metotlar\u0131nda.<\/p>\n<pre><code class=\"language-javascript\">fetch('https:\/\/api.example.com\/data')\n      .then(response => response.json())\n      .then(data => console.log(data))\n      .catch(error => console.error('Hata:', error));<\/code><\/pre>\n<h4>Fonksiyon Tan\u0131mlamalar\u0131nda K\u0131sa Yaz\u0131m<\/h4>\n<p>Anonim fonksiyonlar\u0131 veya tek kullan\u0131ml\u0131k yard\u0131mc\u0131 fonksiyonlar\u0131 tan\u0131mlarken arrow fonksiyonlar\u0131 kodun daha kompakt olmas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Geleneksel anonim fonksiyon\ndocument.getElementById('myButton').addEventListener('click', function(event) {\n  console.log('Butona t\u0131kland\u0131!', event.target);\n});\n\n\/\/ Arrow fonksiyonu\ndocument.getElementById('myButton').addEventListener('click', (event) => {\n  console.log('Butona t\u0131kland\u0131!', event.target);\n});<\/code><\/pre>\n<h4>React Bile\u015fenlerinde Y\u00f6ntem Ba\u011flama (Class Components i\u00e7in)<\/h4>\n<p>React&#8217;in s\u0131n\u0131f tabanl\u0131 bile\u015fenlerinde, bile\u015fen y\u00f6ntemlerinin <code>this<\/code> ba\u011flam\u0131n\u0131 do\u011fru bir \u015fekilde korumak genellikle sorunluydu. Arrow fonksiyonlar\u0131 bu sorunu do\u011fal olarak \u00e7\u00f6zd\u00fc:<\/p>\n<pre><code class=\"language-javascript\">class MyComponent extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = { count: 0 };\n    \/\/ Geleneksel y\u00f6ntem: this'i manuel olarak ba\u011flama\n    \/\/ this.handleClick = this.handleClick.bind(this);\n  }\n\n  \/\/ Arrow fonksiyonu kullanarak metot tan\u0131mlama\n  \/\/ Bu y\u00f6ntem, 'this' ba\u011flam\u0131n\u0131 otomatik olarak bile\u015fen \u00f6rne\u011fine ba\u011flar\n  handleClick = () => {\n    this.setState(prevState => ({\n      count: prevState.count + 1\n    }));\n  };\n\n  render() {\n    return (\n      <button onClick={this.handleClick}>\n        T\u0131klama Say\u0131s\u0131: {this.state.count}\n      <\/button>\n    );\n  }\n}<\/code><\/pre>\n<p>Modern React geli\u015ftirme genellikle fonksiyonel bile\u015fenler ve Hooks ile yap\u0131ld\u0131\u011f\u0131ndan, bu kullan\u0131m durumu eskisi kadar yayg\u0131n de\u011fildir, ancak eski kod tabanlar\u0131nda veya belirli senaryolarda hala kar\u015f\u0131m\u0131za \u00e7\u0131kabilir.<\/p>\n<h3><code>this<\/code> Ba\u011flam\u0131: Geleneksel Fonksiyonlar ve Arrow Fonksiyonlar\u0131 Aras\u0131ndaki En B\u00fcy\u00fck Fark<\/h3>\n<p>Arrow fonksiyonlar\u0131n\u0131n en belirgin ve \u00f6nemli \u00f6zelli\u011fi, <code>this<\/code> anahtar kelimesini geleneksel fonksiyonlardan farkl\u0131 ele almas\u0131d\u0131r. Bu fark\u0131 anlamak, JavaScript&#8217;te daha g\u00fcvenilir ve hatas\u0131z kod yazmak i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h4>Geleneksel Fonksiyonlarda <code>this<\/code><\/h4>\n<p>Geleneksel fonksiyonlarda (<code>function<\/code> anahtar kelimesiyle tan\u0131mlananlar), <code>this<\/code>&#8216;in de\u011feri fonksiyonun nas\u0131l \u00e7a\u011fr\u0131ld\u0131\u011f\u0131na ba\u011fl\u0131d\u0131r. Bu duruma &#8220;dinamik <code>this<\/code>&#8221; denir. \u0130\u015fte baz\u0131 senaryolar:<\/p>\n<p>*   <strong>Global Ba\u011flamda:<\/strong> Taray\u0131c\u0131da <code>window<\/code> objesini, Node.js&#8217;te <code>global<\/code> objesini veya <code>undefined<\/code> (strict mode&#8217;da) i\u015faret eder.<\/p>\n<pre><code class=\"language-javascript\">function showThis() {\n      console.log(this);\n    }\n    showThis(); \/\/ Taray\u0131c\u0131da: Window objesi, Node.js'te: <ref *1> Object [global]<\/code><\/pre>\n<p>*   <strong>Metot Olarak Bir Objenin \u0130\u00e7inde:<\/strong> <code>this<\/code>, metodu i\u00e7eren objeyi i\u015faret eder.<\/p>\n<pre><code class=\"language-javascript\">const person = {\n      name: \"Ali\",\n      greet: function() {\n        console.log(<code>Merhaba, ben ${this.name}.<\/code>);\n      }\n    };\n    person.greet(); \/\/ Merhaba, ben Ali. (this, person objesidir)<\/code><\/pre>\n<p>*   <strong>Constructor Olarak (<code>new<\/code> ile):<\/strong> <code>this<\/code>, yeni olu\u015fturulan obje \u00f6rne\u011fini i\u015faret eder.<\/p>\n<pre><code class=\"language-javascript\">function Car(make) {\n      this.make = make;\n      console.log(this); \/\/ Car { make: 'Ford' }\n    }\n    const myCar = new Car(\"Ford\");<\/code><\/pre>\n<p>*   <strong>Olay \u0130\u015fleyici Olarak:<\/strong> <code>this<\/code>, olay\u0131 tetikleyen DOM eleman\u0131n\u0131 i\u015faret eder.<\/p>\n<pre><code class=\"language-html\"><button id=\"myBtn\">T\u0131kla<\/button>\n    <script>\n      document.getElementById('myBtn').addEventListener('click', function() {\n        console.log(this); \/\/ <button id=\"myBtn\">T\u0131kla<\/button>\n      });\n    <\/script><\/code><\/pre>\n<p>*   <strong><code>call()<\/code>, <code>apply()<\/code>, <code>bind()<\/code> ile:<\/strong> Bu metotlar, bir fonksiyonun <code>this<\/code> ba\u011flam\u0131n\u0131 manuel olarak ayarlamak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-javascript\">function sayHello() {\n      console.log(<code>Merhaba, ${this.name}.<\/code>);\n    }\n    const user = { name: \"Ay\u015fe\" };\n    sayHello.call(user); \/\/ Merhaba, Ay\u015fe.<\/code><\/pre>\n<p>Geleneksel fonksiyonlardaki bu dinamik <code>this<\/code> davran\u0131\u015f\u0131, \u00f6zellikle i\u00e7 i\u00e7e fonksiyonlar veya callback&#8217;ler kullan\u0131ld\u0131\u011f\u0131nda kafa kar\u0131\u015f\u0131kl\u0131\u011f\u0131na yol a\u00e7abilir. \u00d6rne\u011fin:<\/p>\n<pre><code class=\"language-javascript\">function Counter() {\n  this.count = 0;\n  \/\/ Geleneksel fonksiyon\n  setInterval(function grow() {\n    \/\/ Burada 'this', Counter objesine de\u011fil, global (window\/global) objesine i\u015faret eder.\n    \/\/ \u00c7\u00fcnk\u00fc setInterval callback'i global ba\u011flamda \u00e7a\u011fr\u0131l\u0131r.\n    this.count++;\n    console.log(this.count); \/\/ NaN veya beklenmeyen de\u011fer\n  }, 1000);\n}\n\/\/ const counter = new Counter(); \/\/ Hata verir<\/code><\/pre>\n<p>Bu sorunu \u00e7\u00f6zmek i\u00e7in eski JavaScript&#8217;te genellikle <code>const self = this;<\/code> veya <code>const that = this;<\/code> gibi yakla\u015f\u0131mlar kullan\u0131l\u0131rd\u0131:<\/p>\n<pre><code class=\"language-javascript\">function CounterOld() {\n  this.count = 0;\n  const self = this; \/\/ 'this' de\u011ferini sakla\n  setInterval(function grow() {\n    self.count++; \/\/ Saklanan 'this' de\u011ferini kullan\n    console.log(self.count);\n  }, 1000);\n}\n\/\/ const counterOld = new CounterOld(); \/\/ \u00c7al\u0131\u015f\u0131r<\/code><\/pre>\n<h4>Arrow Fonksiyonlar\u0131nda <code>this<\/code><\/h4>\n<p>Arrow fonksiyonlar\u0131, kendi <code>this<\/code> ba\u011flamlar\u0131n\u0131 olu\u015fturmazlar. Bunun yerine, tan\u0131mland\u0131klar\u0131 kapsay\u0131c\u0131 (lexical) ba\u011flamdan <code>this<\/code> de\u011ferini al\u0131rlar. Bu, &#8220;lexical <code>this<\/code>&#8221; olarak bilinir. Yani, bir arrow fonksiyonunun <code>this<\/code>&#8216;i, onu \u00e7evreleyen en yak\u0131n geleneksel fonksiyonun veya global ba\u011flam\u0131n <code>this<\/code>&#8216;idir.<\/p>\n<p>Yukar\u0131daki <code>Counter<\/code> \u00f6rne\u011fini arrow fonksiyonu ile yeniden yazarsak:<\/p>\n<pre><code class=\"language-javascript\">function CounterNew() {\n  this.count = 0;\n  \/\/ Arrow fonksiyonu\n  setInterval(() => {\n    \/\/ Buradaki 'this', CounterNew objesine i\u015faret eder.\n    \/\/ \u00c7\u00fcnk\u00fc arrow fonksiyonu, tan\u0131mland\u0131\u011f\u0131 CounterNew fonksiyonunun 'this'ini miras al\u0131r.\n    this.count++;\n    console.log(this.count);\n  }, 1000);\n}\nconst counterNew = new CounterNew(); \/\/ Her saniye 1, 2, 3... diye artar<\/code><\/pre>\n<p>Bu \u00f6rnek, arrow fonksiyonlar\u0131n\u0131n <code>this<\/code> ba\u011flam\u0131 sorununu ne kadar zarif\u00e7e \u00e7\u00f6zd\u00fc\u011f\u00fcn\u00fc a\u00e7\u0131k\u00e7a g\u00f6stermektedir. Kod daha temiz ve niyeti daha a\u00e7\u0131k hale gelir.<\/p>\n<h4><code>call()<\/code>, <code>apply()<\/code>, <code>bind()<\/code> ile \u0130li\u015fki<\/h4>\n<p>Arrow fonksiyonlar\u0131n\u0131n <code>this<\/code> ba\u011flam\u0131, tan\u0131mland\u0131klar\u0131 anda belirlendi\u011fi ve de\u011fi\u015ftirilemedi\u011fi i\u00e7in, <code>call()<\/code>, <code>apply()<\/code> veya <code>bind()<\/code> metotlar\u0131 ile <code>this<\/code> de\u011ferini manip\u00fcle etme giri\u015fimleri ba\u015far\u0131s\u0131z olur. Bu metotlar yine de \u00e7a\u011fr\u0131labilir ve arg\u00fcmanlar\u0131 iletebilir, ancak <code>this<\/code> ba\u011flam\u0131n\u0131 de\u011fi\u015ftiremezler.<\/p>\n<pre><code class=\"language-javascript\">const obj = {\n  name: \"Objem\",\n  greet: () => {\n    console.log(<code>Merhaba, ben ${this.name}.<\/code>); \/\/ 'this' burada objeye de\u011fil, global'e i\u015faret eder.\n  }\n};\nobj.greet(); \/\/ Merhaba, ben undefined. (globalde 'name' yoksa)\n\nconst anotherObj = { name: \"Ba\u015fka Obje\" };\nobj.greet.call(anotherObj); \/\/ Hala 'Merhaba, ben undefined.'<\/code><\/pre>\n<p>Bu durum, arrow fonksiyonlar\u0131n\u0131n ne zaman kullan\u0131lmamas\u0131 gerekti\u011fini anlamak i\u00e7in \u00f6nemli bir noktad\u0131r. E\u011fer bir fonksiyonun <code>this<\/code> ba\u011flam\u0131n\u0131n dinamik olarak de\u011fi\u015fmesi veya <code>call<\/code>\/<code>apply<\/code>\/<code>bind<\/code> ile ayarlanmas\u0131 gerekiyorsa, geleneksel fonksiyonlar tercih edilmelidir.<\/p>\n<h3>Arrow Fonksiyonlar\u0131n\u0131n Di\u011fer \u00d6zellikleri ve Avantajlar\u0131<\/h3>\n<p><code>this<\/code> ba\u011flam\u0131 farkl\u0131l\u0131\u011f\u0131 d\u0131\u015f\u0131nda, arrow fonksiyonlar\u0131n\u0131n ba\u015fka \u00f6nemli \u00f6zellikleri ve avantajlar\u0131 da vard\u0131r:<\/p>\n<h4>K\u0131sa ve Okunabilir Kod<\/h4>\n<p>En belirgin avantaj\u0131, \u00f6zellikle basit callback&#8217;ler i\u00e7in kodun \u00e7ok daha k\u0131sa ve okunabilir hale gelmesidir. <code>function<\/code> anahtar kelimesi, parantezler ve <code>return<\/code> ifadesinin ortadan kalkmas\u0131, kodun &#8220;g\u00fcr\u00fclt\u00fcs\u00fcn\u00fc&#8221; azalt\u0131r.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Geleneksel\n[1, 2, 3].map(function(n) { return n * 2; });\n\n\/\/ Arrow\n[1, 2, 3].map(n => n * 2);<\/code><\/pre>\n<h4><code>arguments<\/code> Objesi Yoklu\u011fu<\/h4>\n<p>Arrow fonksiyonlar\u0131n\u0131n kendi <code>arguments<\/code> objesi yoktur. E\u011fer bir arrow fonksiyonunun i\u00e7inde <code>arguments<\/code> objesine eri\u015fmeye \u00e7al\u0131\u015f\u0131rsan\u0131z, bu, onu \u00e7evreleyen en yak\u0131n geleneksel fonksiyonun <code>arguments<\/code> objesini d\u00f6nd\u00fcr\u00fcr. E\u011fer b\u00f6yle bir \u00e7evreleyen fonksiyon yoksa, <code>arguments<\/code> tan\u0131ms\u0131z olur veya hata verir.<\/p>\n<pre><code class=\"language-javascript\">function outer() {\n  const innerArrow = () => {\n    console.log(arguments); \/\/ outer fonksiyonunun arguments objesini g\u00f6sterir\n  };\n  innerArrow(4, 5); \/\/ innerArrow'a ge\u00e7irilen arg\u00fcmanlar etkilemez\n}\nouter(1, 2, 3); \/\/ Arguments(3) [1, 2, 3, callee: \u0192, Symbol(Symbol.iterator): \u0192]<\/code><\/pre>\n<p><code>arguments<\/code> objesi yerine, modern JavaScript&#8217;te rest parametreleri (<code>...args<\/code>) kullanmak daha esnek ve okunabilir bir yakla\u015f\u0131md\u0131r. Arrow fonksiyonlar\u0131 da rest parametrelerini destekler:<\/p>\n<pre><code class=\"language-javascript\">const sumAll = (...args) => args.reduce((acc, num) => acc + num, 0);\nconsole.log(sumAll(1, 2, 3, 4)); \/\/ 10<\/code><\/pre>\n<h4><code>new<\/code> Anahtar Kelimesiyle Kullan\u0131lamaz<\/h4>\n<p>Arrow fonksiyonlar\u0131, constructor (yap\u0131c\u0131) fonksiyonlar olarak kullan\u0131lamazlar. Yani, <code>new<\/code> anahtar kelimesiyle bir arrow fonksiyonundan yeni bir obje \u00f6rne\u011fi olu\u015fturamazs\u0131n\u0131z. Bunu yapmaya \u00e7al\u0131\u015fmak bir <code>TypeError<\/code> hatas\u0131 ile sonu\u00e7lan\u0131r. Bunun nedeni, arrow fonksiyonlar\u0131n\u0131n kendi <code>this<\/code> ba\u011flamlar\u0131na ve <code>prototype<\/code> \u00f6zelliklerine sahip olmamalar\u0131d\u0131r.<\/p>\n<pre><code class=\"language-javascript\">const MyArrowFunc = () => {};\n\/\/ const instance = new MyArrowFunc(); \/\/ TypeError: MyArrowFunc is not a constructor<\/code><\/pre>\n<h4><code>yield<\/code> Anahtar Kelimesiyle Kullan\u0131lamaz<\/h4>\n<p>Arrow fonksiyonlar\u0131, generator fonksiyonlar\u0131 olarak da kullan\u0131lamazlar. Yani, <code>yield<\/code> anahtar kelimesini bir arrow fonksiyonunun i\u00e7inde kullanamazs\u0131n\u0131z. Generator fonksiyonlar\u0131 i\u00e7in geleneksel <code>function*<\/code> s\u00f6zdizimi kullan\u0131lmal\u0131d\u0131r.<\/p>\n<h4>Daha \u0130yi Semantik<\/h4>\n<p><code>this<\/code> ba\u011flam\u0131n\u0131n davran\u0131\u015f\u0131n\u0131 basitle\u015ftirerek, arrow fonksiyonlar\u0131 kodun amac\u0131n\u0131 daha net ifade etmeye yard\u0131mc\u0131 olur. Art\u0131k <code>this<\/code>&#8216;in neye i\u015faret etti\u011fini tahmin etmek veya manuel olarak ba\u011flamak zorunda kalmazs\u0131n\u0131z, bu da \u00f6zellikle asenkron kodda ve olay i\u015fleyicilerinde hatalar\u0131 azalt\u0131r.<\/p>\n<h3>Arrow Fonksiyonlar\u0131n\u0131n Dezavantajlar\u0131 ve Ne Zaman Kullan\u0131lmamal\u0131d\u0131r?<\/h3>\n<p>Arrow fonksiyonlar\u0131 bir\u00e7ok avantaj sunsa da, her zaman en iyi se\u00e7im de\u011fillerdir. Baz\u0131 durumlarda geleneksel fonksiyonlar daha uygun veya hatta zorunlu olabilir.<\/p>\n<h4>Constructor Fonksiyonlar\u0131 Olarak Kullan\u0131lamazlar<\/h4>\n<p>Daha \u00f6nce belirtildi\u011fi gibi, arrow fonksiyonlar\u0131 <code>new<\/code> anahtar kelimesiyle kullan\u0131lamaz. E\u011fer bir objenin yap\u0131c\u0131 fonksiyonunu tan\u0131mlaman\u0131z gerekiyorsa, geleneksel <code>function<\/code> s\u00f6zdizimini kullanmal\u0131s\u0131n\u0131z.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Do\u011fru kullan\u0131m: Geleneksel fonksiyon constructor olarak\nfunction Person(name) {\n  this.name = name;\n}\nconst person1 = new Person(\"Ay\u015fe\");\nconsole.log(person1.name); \/\/ Ay\u015fe\n\n\/\/ Yanl\u0131\u015f kullan\u0131m: Arrow fonksiyonu constructor olarak\n\/\/ const PersonArrow = (name) => { this.name = name; };\n\/\/ const person2 = new PersonArrow(\"Fatma\"); \/\/ TypeError<\/code><\/pre>\n<h4>Metot Tan\u0131mlamalar\u0131nda Dikkat Edilmesi Gerekenler<\/h4>\n<p>Bir objenin i\u00e7inde metot tan\u0131mlarken arrow fonksiyonu kullanmak, <code>this<\/code> ba\u011flam\u0131n\u0131n beklendi\u011fi gibi \u00e7al\u0131\u015fmamas\u0131na neden olabilir. Arrow fonksiyonu, objenin kendisi yerine, objenin tan\u0131mland\u0131\u011f\u0131 kapsay\u0131c\u0131 ba\u011flam\u0131n <code>this<\/code>&#8216;ini al\u0131r (genellikle global <code>window<\/code> veya <code>undefined<\/code> strict mode&#8217;da).<\/p>\n<pre><code class=\"language-javascript\">const user = {\n  name: \"Can\",\n  \/\/ Yanl\u0131\u015f kullan\u0131m: 'this' global'e i\u015faret eder\n  sayHelloArrow: () => {\n    console.log(<code>Merhaba, ben ${this.name}.<\/code>);\n  },\n  \/\/ Do\u011fru kullan\u0131m: 'this' user objesine i\u015faret eder\n  sayHelloTraditional: function() {\n    console.log(<code>Merhaba, ben ${this.name}.<\/code>);\n  },\n  \/\/ ES6 k\u0131sa metot s\u00f6zdizimi, geleneksel fonksiyon gibi davran\u0131r\n  sayHelloES6() {\n    console.log(<code>Merhaba, ben ${this.name}.<\/code>);\n  }\n};\n\nuser.sayHelloArrow();      \/\/ Merhaba, ben undefined. (veya globaldeki 'name' de\u011feri)\nuser.sayHelloTraditional(); \/\/ Merhaba, ben Can.\nuser.sayHelloES6();         \/\/ Merhaba, ben Can.<\/code><\/pre>\n<p>Bu nedenle, bir objenin kendi \u00f6zelliklerine eri\u015fmesi gereken metotlar\u0131 tan\u0131mlarken geleneksel fonksiyon ifadeleri veya ES6&#8217;n\u0131n k\u0131sa metot s\u00f6zdizimi tercih edilmelidir.<\/p>\n<h4>Olay \u0130\u015fleyicilerinde Dikkat Edilmesi Gerekenler<\/h4>\n<p>DOM olay i\u015fleyicilerinde, geleneksel fonksiyonlar genellikle olay\u0131 tetikleyen eleman\u0131 (<code>event.target<\/code> veya <code>this<\/code>) referans al\u0131r. Arrow fonksiyonlar\u0131 kullan\u0131ld\u0131\u011f\u0131nda ise <code>this<\/code>, olay\u0131 tetikleyen eleman yerine kapsay\u0131c\u0131 ba\u011flam\u0131n <code>this<\/code>&#8216;ini al\u0131r. Bu durum, olay i\u015fleyicisi i\u00e7inde do\u011frudan olay\u0131 tetikleyen elemana eri\u015fmeniz gerekti\u011finde sorun yaratabilir.<\/p>\n<pre><code class=\"language-html\"><button id=\"myBtnEvent\">T\u0131kla<\/button>\n<script>\n  document.getElementById('myBtnEvent').addEventListener('click', function() {\n    console.log(this.id); \/\/ myBtnEvent (Do\u011fru)\n  });\n\n  document.getElementById('myBtnEvent').addEventListener('click', () => {\n    console.log(this);     \/\/ Window objesi (Yanl\u0131\u015f, button de\u011fil)\n    \/\/ console.log(this.id); \/\/ undefined\n    console.log(event.target.id); \/\/ myBtnEvent (event objesi ile eri\u015filebilir)\n  });\n<\/script><\/code><\/pre>\n<p>E\u011fer olay i\u015fleyicisinde <code>this<\/code>&#8216;in olay eleman\u0131na referans vermesini bekliyorsan\u0131z, geleneksel fonksiyon kullanmak daha g\u00fcvenlidir. Ancak <code>event<\/code> objesi arac\u0131l\u0131\u011f\u0131yla <code>event.target<\/code>&#8216;a eri\u015fmek genellikle <code>this<\/code>&#8216;i kullanmaktan daha iyi bir uygulamad\u0131r, bu durumda arrow fonksiyonlar\u0131 sorun yaratmaz.<\/p>\n<h4>Okunabilirlik Sorunlar\u0131 (A\u015f\u0131r\u0131 K\u0131sa Kullan\u0131m)<\/h4>\n<p>Arrow fonksiyonlar\u0131n\u0131n k\u0131sa s\u00f6zdizimi, bazen a\u015f\u0131r\u0131ya ka\u00e7\u0131ld\u0131\u011f\u0131nda kodun okunabilirli\u011fini azaltabilir. \u00c7ok karma\u015f\u0131k tek sat\u0131rl\u0131k ifadeler veya i\u00e7 i\u00e7e ge\u00e7mi\u015f arrow fonksiyonlar\u0131, \u00f6zellikle yeni ba\u015flayanlar veya kod taban\u0131na yeni kat\u0131lanlar i\u00e7in anla\u015f\u0131lmas\u0131 zor olabilir.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Okunmas\u0131 zor bir \u00f6rnek\nconst calculateComplex = (a, b) => a > b ? (() => a <em> 2)() : (() => b <\/em> 3)();<\/code><\/pre>\n<p>Bu t\u00fcr durumlarda, daha uzun ama daha a\u00e7\u0131klay\u0131c\u0131 geleneksel fonksiyonlar veya \u00e7ok sat\u0131rl\u0131 arrow fonksiyonlar\u0131 kullanmak daha iyi bir se\u00e7im olabilir.<\/p>\n<h4><code>arguments<\/code> Objelerine \u0130htiya\u00e7 Duyulan Durumlar<\/h4>\n<p>E\u011fer bir fonksiyonun <code>arguments<\/code> objesine eri\u015fmesi kesinlikle gerekiyorsa ve rest parametreleriyle yeniden d\u00fczenleme m\u00fcmk\u00fcn de\u011filse veya istenmiyorsa, geleneksel fonksiyonlar kullan\u0131lmal\u0131d\u0131r.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<h4>Arrow fonksiyonlar\u0131 her zaman geleneksel fonksiyonlardan daha m\u0131 iyidir?<\/h4>\n<p>Hay\u0131r. Arrow fonksiyonlar\u0131 bir\u00e7ok durumda kodun daha temiz ve okunabilir olmas\u0131n\u0131 sa\u011flarken, <code>this<\/code> ba\u011flam\u0131n\u0131n dinamik olmas\u0131 gereken veya <code>new<\/code> ile \u00e7a\u011fr\u0131lmas\u0131 gereken durumlarda geleneksel fonksiyonlar daha uygundur. En iyi uygulama, duruma g\u00f6re do\u011fru arac\u0131 se\u00e7mektir.<\/p>\n<h4>Arrow fonksiyonlar\u0131 performans a\u00e7\u0131s\u0131ndan fark yarat\u0131r m\u0131?<\/h4>\n<p>Genellikle hay\u0131r. Performans farkl\u0131l\u0131klar\u0131 \u00e7ok k\u00fc\u00e7\u00fck ve \u00e7o\u011fu uygulama i\u00e7in ihmal edilebilir d\u00fczeydedir. Mikro-optimizasyonlar d\u0131\u015f\u0131nda, performans endi\u015feleri nedeniyle birini di\u011ferine tercih etmek nadiren mant\u0131kl\u0131d\u0131r. Odaklan\u0131lmas\u0131 gereken as\u0131l nokta kodun okunabilirli\u011fi, bak\u0131m\u0131 ve <code>this<\/code> ba\u011flam\u0131n\u0131n do\u011fru y\u00f6netimidir.<\/p>\n<h4>Arrow fonksiyonlar\u0131 <code>function<\/code> anahtar kelimesini tamamen kald\u0131racak m\u0131?<\/h4>\n<p>Hay\u0131r. JavaScript&#8217;in geriye d\u00f6n\u00fck uyumlulu\u011fu ve belirli kullan\u0131m durumlar\u0131 (constructor&#8217;lar, metotlar, <code>arguments<\/code> objesi ihtiyac\u0131) nedeniyle <code>function<\/code> anahtar kelimesi dili terk etmeyecektir. Her ikisi de JavaScript&#8217;in \u00f6nemli bir par\u00e7as\u0131 olarak varl\u0131\u011f\u0131n\u0131 s\u00fcrd\u00fcrecektir.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Arrow fonksiyonlar\u0131, ECMAScript 2015 ile birlikte JavaScript&#8217;e eklenen ve modern web geli\u015ftirmede devrim yaratan g\u00fc\u00e7l\u00fc bir \u00f6zelliktir. K\u0131sa ve temiz s\u00f6zdizimleri, \u00f6zellikle callback fonksiyonlar\u0131 ve dizilerle \u00e7al\u0131\u015fan metotlar gibi yayg\u0131n kullan\u0131m durumlar\u0131nda kodun okunabilirli\u011fini ve yaz\u0131m kolayl\u0131\u011f\u0131n\u0131 art\u0131r\u0131r. Ancak, arrow fonksiyonlar\u0131n\u0131n en kritik \u00f6zelli\u011fi, kendi <code>this<\/code> ba\u011flamlar\u0131n\u0131 olu\u015fturmamalar\u0131 ve <code>this<\/code> de\u011ferini tan\u0131mland\u0131klar\u0131 kapsay\u0131c\u0131 (lexical) ba\u011flamdan almalar\u0131d\u0131r. Bu &#8220;lexical <code>this<\/code>&#8221; davran\u0131\u015f\u0131, geleneksel fonksiyonlardaki dinamik <code>this<\/code>&#8216;in yol a\u00e7t\u0131\u011f\u0131 bir\u00e7ok karma\u015f\u0131k sorunu ortadan kald\u0131r\u0131r.<\/p>\n<p>Yine de, arrow fonksiyonlar\u0131n\u0131n her durumda en iyi \u00e7\u00f6z\u00fcm olmad\u0131\u011f\u0131n\u0131 unutmamak \u00f6nemlidir. Constructor fonksiyonlar\u0131 olarak kullan\u0131lamamalar\u0131, kendi <code>arguments<\/code> objelerinin olmamas\u0131 ve metot tan\u0131mlamalar\u0131nda veya olay i\u015fleyicilerinde <code>this<\/code>&#8216;in beklenen de\u011feri almamas\u0131 gibi dezavantajlar\u0131 vard\u0131r. Bu durumlar, geleneksel fonksiyonlar\u0131n hala tercih edilmesi gereken senaryolar\u0131 olu\u015fturur.<\/p>\n<p>\u00d6zetle, arrow fonksiyonlar\u0131n\u0131 anlamak ve ne zaman kullan\u0131l\u0131p ne zaman kullan\u0131lmayaca\u011f\u0131n\u0131 bilmek, her modern JavaScript geli\u015ftiricisi i\u00e7in temel bir beceridir. Do\u011fru yerde do\u011fru fonksiyon tipini kullanmak, daha temiz, daha anla\u015f\u0131l\u0131r ve daha az hataya a\u00e7\u0131k kod yazman\u0131za olanak tan\u0131r. Arrow fonksiyonlar\u0131, JavaScript ekosisteminin zenginli\u011fini ve esnekli\u011fini art\u0131ran g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r ve geli\u015ftiricilerin daha verimli kod yazmas\u0131na yard\u0131mc\u0131 olur.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"JavaScript&#8217;te Arrow Fonksiyonlar\u0131n\u0131 Anlamak: Kapsaml\u0131 Bir Rehber\nGiri\u015f: Arrow Fonksiyonlar\u0131 Nedir ve Neden \u00d6nemlidir?\nJavaScript, s\u00fcrekli gel","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-35409","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&#039;te Arrow Fonksiyonlar\u0131n\u0131 Anlamak: Kapsaml\u0131 Bir Rehber - 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\/javascriptte-arrow-fonksiyonlarini-anlamak-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JavaScript&#039;te Arrow Fonksiyonlar\u0131n\u0131 Anlamak: Kapsaml\u0131 Bir Rehber\" \/>\n<meta property=\"og:description\" content=\"JavaScript&#039;te Arrow Fonksiyonlar\u0131n\u0131 Anlamak: Kapsaml\u0131 Bir Rehber Giri\u015f: Arrow Fonksiyonlar\u0131 Nedir ve Neden \u00d6nemlidir? JavaScript, s\u00fcrekli gel\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/javascriptte-arrow-fonksiyonlarini-anlamak-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-29T06:40:44+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=\"15 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-arrow-fonksiyonlarini-anlamak-kapsamli-bir-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-arrow-fonksiyonlarini-anlamak-kapsamli-bir-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"JavaScript&#8217;te Arrow Fonksiyonlar\u0131n\u0131 Anlamak: Kapsaml\u0131 Bir Rehber\",\"datePublished\":\"2025-11-29T06:40:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-arrow-fonksiyonlarini-anlamak-kapsamli-bir-rehber\/\"},\"wordCount\":2110,\"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\/javascriptte-arrow-fonksiyonlarini-anlamak-kapsamli-bir-rehber\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-arrow-fonksiyonlarini-anlamak-kapsamli-bir-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-arrow-fonksiyonlarini-anlamak-kapsamli-bir-rehber\/\",\"name\":\"JavaScript'te Arrow Fonksiyonlar\u0131n\u0131 Anlamak: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-29T06:40:44+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-arrow-fonksiyonlarini-anlamak-kapsamli-bir-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/javascriptte-arrow-fonksiyonlarini-anlamak-kapsamli-bir-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-arrow-fonksiyonlarini-anlamak-kapsamli-bir-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JavaScript&#8217;te Arrow Fonksiyonlar\u0131n\u0131 Anlamak: Kapsaml\u0131 Bir Rehber\"}]},{\"@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'te Arrow Fonksiyonlar\u0131n\u0131 Anlamak: Kapsaml\u0131 Bir Rehber - 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\/javascriptte-arrow-fonksiyonlarini-anlamak-kapsamli-bir-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"JavaScript'te Arrow Fonksiyonlar\u0131n\u0131 Anlamak: Kapsaml\u0131 Bir Rehber","og_description":"JavaScript'te Arrow Fonksiyonlar\u0131n\u0131 Anlamak: Kapsaml\u0131 Bir Rehber Giri\u015f: Arrow Fonksiyonlar\u0131 Nedir ve Neden \u00d6nemlidir? JavaScript, s\u00fcrekli gel","og_url":"https:\/\/fatihsoysal.com\/blog\/javascriptte-arrow-fonksiyonlarini-anlamak-kapsamli-bir-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-29T06:40:44+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"15 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/javascriptte-arrow-fonksiyonlarini-anlamak-kapsamli-bir-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascriptte-arrow-fonksiyonlarini-anlamak-kapsamli-bir-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"JavaScript&#8217;te Arrow Fonksiyonlar\u0131n\u0131 Anlamak: Kapsaml\u0131 Bir Rehber","datePublished":"2025-11-29T06:40:44+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascriptte-arrow-fonksiyonlarini-anlamak-kapsamli-bir-rehber\/"},"wordCount":2110,"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\/javascriptte-arrow-fonksiyonlarini-anlamak-kapsamli-bir-rehber\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/javascriptte-arrow-fonksiyonlarini-anlamak-kapsamli-bir-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/javascriptte-arrow-fonksiyonlarini-anlamak-kapsamli-bir-rehber\/","name":"JavaScript'te Arrow Fonksiyonlar\u0131n\u0131 Anlamak: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-29T06:40:44+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascriptte-arrow-fonksiyonlarini-anlamak-kapsamli-bir-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/javascriptte-arrow-fonksiyonlarini-anlamak-kapsamli-bir-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/javascriptte-arrow-fonksiyonlarini-anlamak-kapsamli-bir-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"JavaScript&#8217;te Arrow Fonksiyonlar\u0131n\u0131 Anlamak: Kapsaml\u0131 Bir Rehber"}]},{"@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\/35409","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=35409"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35409\/revisions"}],"predecessor-version":[{"id":35410,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35409\/revisions\/35410"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35409"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35409"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35409"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}