> For the complete documentation index, see [llms.txt](https://hanuce.gitbook.io/javascript-egitimi/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hanuce.gitbook.io/javascript-egitimi/fonksiyonlar-temel/fonksiyon-ifadesi.md).

# Fonksiyon İfadesi

Fonksiyonu Değişkene Atama

Bir değişkene değer olarak fonksiyon atamaya **fonksiyon ifade etme** denir. Bu kullanımda fonksiyon sonuna zorunlu olmadığı halde okunurluğu artırmak için **`;`** konur.

Bir değişkene değer olarak fonksiyon tanımlarsak fonksiyon nasıl yürütülecek ? Tabii ki de sonuna **`()`** sembolleri ekleyerek. Örnek.

{% code lineNumbers="true" %}

```javascript
let fonksiyon = function fx() {
    //kodlar
    return 'fx fonksiyonu';
}; 
alert( fonksiyon() ); // fonksiyon kodları stringmiş gibi görünür.
```

{% endcode %}

İfade edilen (deklare edilen) fonksiyonlara isim vermeye gerek yoktur çünkü **ismi ile çağrılamaz**. İsimsiz bu fonksiyonlara **anonim fonksiyon** denir. Örnek.

{% code lineNumbers="true" %}

```javascript
let anonim = function () { // ismi yok. anonim fonksiyon.
    return 'Bu anonim bir fonksiyon ifadesidir.';
};
alert( anonim() ); // ifade edilen fonksiyonu yürüttük.
```

{% endcode %}

Başka bir örnek.

{% code lineNumbers="true" %}

```javascript
let usAl = function (sayi, us) { // ismi yok. anonim fonksiyon.
    return sayi**us
};
alert( usAl(3,4) ); // ifade edilen fonksiyonu yürüttük.
```

{% endcode %}

Bu şekilde ifade ettiğimiz değişkenin tipi **`function`** olarak görünür. Bir fonksiyonu **ifade etmek** ile **tanımlamak** arasında da bazı farklar vardır.

* **Tanımlaman Fonksiyon:** Kapsam yürütülmeden **önce yürütülerek bellekte oluşturulur.** Bu sayede bloktaki herhangi bir yerden fonksiyon ismi ile çağrılabilir.
* **İfade Edilen Fonksiyon:** İfade edildiği (deklare edildiği) **satır yürütüldüğünde bellekte oluşturulur.** Bu sebeple satır yürütüldükten sonra değişken adı ile çağrılabilir.

<table data-header-hidden><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><pre class="language-javascript"><code class="lang-javascript">alert( fx() ); // çalışır
function fx() {
    //kodlar
    return 'fx fonksiyon tanımı';
}
alert( fx() ); //çalışır
</code></pre></td><td><pre class="language-javascript"><code class="lang-javascript">alert( foo() ); // hata verir.
let foo = function () {
    //kodlar
    return 'foo fonksiyon ifadesi';
};
alert( foo() ); //çalışır
</code></pre></td></tr></tbody></table>

<img src="https://1783608288-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtkAky55y3oAsmbswePAh%2Fuploads%2F6dJBKX3WFCk92LEpeVTP%2Ffile.excalidraw.svg?alt=media&amp;token=1bedc73b-4365-4c3d-acad-824857cdd666" alt="" class="gitbook-drawing">

Doğrusal olmayan bir yapıda işlem yapmamızı sağlayan fonksiyonlar çok önemlidir. Hangi kullanımı tercih edeceğiniz genellikle performans ve güvenlik ile ilgili olsa da fonksiyonlar genel olarak tanımlanarak kullanılır.
