JavaScript
Sözdizimi > Basit örnekler

JavaScript'teki değişkenler, var, let  veya const  anahtar sözcükleri kullanılarak tanımlanabilir.
// 'x' adında bir fonksiyon kapsamlı (function-scoped) değişken bildirir ve buna üstü kapalı şekilde 
// 'undefined' özel değerini atar. Değeri olmayan değişkenler otomatik 'undefined' (tanımsız) olarak ayarlanır.

var x;

// Değişkenler, bunun gibi elle 'tanımsız' olarak ayarlanabilir 
var x2 = undefined;

// Örnek `y` adında bir değişkeni blok kapsamında (block-scoped) bildirir ve 
// değişkenin bir değeri olmadığı için onu `undefined` (tanımsız) olarak ayarlar. 
// "let" anahtar sözcüğü ECMAScript 2015'te tanıtılmıştır.
let y;

// Blok kapsamında (block-scoped) bir bildirim yapar, `z` artık yeniden değer atanamaz olur ve 
// onu bir string değişmezine ayarlar. `const` anahtar sözcüğü ECMAScript 2015'te tanıtılmıştır ve
// yalnızca net bir şekilde atanır.

// `const` anahtar sözcüğü 'sabit' anlamına gelir ki bu nedenden dolayı 'değeri' (value) sabit olduğundan
// değişken bazı ufak istisnalar dışında yeni değer alamaz/atanamaz.
const z = "bu anahtar sözcüğünün değeri yani buraya yeniden atama yapılamaz!";

// `benimSayim` isimli bir değişken bildirilmiş ve değer (value) olarak ona bir sayı değişmezi
// örneğimizde `2`) atanmıştır.
let benimSayim = 2;

// `benimSayim` ı yeniden atar ve onun değerini bir dizi değişmezi (örneğimizde `"bir şeyler"`) atar.
// JavaScript dinamik olarak yazılmış bir dildir, bu nedenle bu yönergelerine uygundur.
benimSayim = "bir şeyler";
Yukarıdaki örnekte, hepsinin önünde iki eğik çizgi bulunan yorumlara dikkat edin.

JavaScript'te yerleşik Giriş/Çıkış (I/O) işlevi yoktur; çalışma zamanı ortamı bunu sağlar. Sürüm 5.1'deki ECMAScript belirtimi şunları belirtir:
aslında, bu spesifikasyonda harici veri girişi veya hesaplanan sonuçların çıkışı için herhangi bir şart yoktur.
Ancak, çoğu çalışma zamanı ortamında çıktı yazdırmak için kullanılabilecek bir console objesi  bulunur. İşte JavaScript'te minimalist bir Hello World programı :
console.log("Merhaba, Dünya!");
HTML belgelerinde bir çıktı için bu program gereklidir:
// "write" metodu kullanılarak, metin nodu (düğümü) yazılabilir.
document.write('bir şeyler');

// HTML elementleri de oluşturulabilir. Öncelikle DOM üzerinde oluşturulmaları gerekir
const benimElementim = document.createElement('div');

// Class veya id gibi öznitelikler oluşturulabilir.
benimElementim.classList.add('bir-seyler');
// benimElementim.classList.add("anotherclass");
benimElementim.id = 'baska-seyler';

// Burada, öznitelik şöyle görünecektir: <span data-attr="baz"></span>
benimElementim.setAttribute('data-atrr', 'baz');

// Son olarak, onu HTML'deki <body> öğesine bir alt öğe olarak ekleyin
document.body.appendChild(benimElementim);

// Elementler bir öğe olarak querySelector ile yakalanabilir ya da forEach döngüsü ile alınabilen birden çok öğe querySelectorAll ile yakalanabilir.
document.querySelector('.class');
document.querySelector('#id');
document.querySelector('[data-other]');
document.querySelectorAll('.multiple');
Basit bir özyinelemeli (recursive) fonksiyon:
function faktoriyel(n) {
  if (n === 0)
    return 1; // 0! = 1

  return n * faktoriyel(n - 1);
}

faktoriyel(3); // 6 sonucunu döndürür
ya da aşağıdaki örnekte olduğu gibi faktöriyel hesaplamasını kontroller ve üçlü operatör vasıtasıyla da kullanabilirsiniz.
function faktoriyel(n) {
    // Yalnızca pozitif bir sayı kullanılmasına izin verin yoksa konsolda uyarı gösterin.
    if (isNaN(n)) {
        console.error("Sayısal olmayan argümana izin verilmemektedir.");
        return NaN; // bu özel bir değerdir ve "Bu Bir Sayı Değil" anlamına gelir.
    }
    if (n === 0)
        return 1; // 0! = 1
    if ( n < 0)
        return undefined; // Negatif sayılar değer olarak verildiğinde 'tanımsız' bildirimi yapın .
    if (n % 1) {
        console.warn(`Belirttiğiniz ${n} ondalıklı değeri en yakın tam sayıya yuvarlanacaktır. Tam sayı olmayanlar için bunun yerine gamma fonksiyonunu kullanmayı düşünün.`);
        n = Math.round(n);
    }
    // Yukarıdaki kontrolleri kullanmak istemeyebilirsiniz. Zorunlu değildir. Bu kısımdan sonra gerçek özyinelemeli faktoriyel hesaplama kodları yer almaktadır.

    // Aşağıdaki satırda özyinelemeleli faktöriyel hesaplamada kullanılan fonksiyon ifadesidir. ES6 ile birlikte tanıtımı yapılan ok fonksiyon söz dizimini kullanır.
    const ozyinelemeli_hesaplama = a => a > 1 ? a * ozyinelemeli_hesaplama(a - 1) : 1; // '?' ile birlikte üçlü operatör kullanımına dikkat ediniz.
    return ozyinelemeli_hesaplama(n);
}

document.write(faktoriyel(3)); // 6 döndürür
Anonim (isimsiz) bir fonksiyon (veya lambda):
let isimsizFonksiyon = () => console.log("İsimsiz bir fonksiyon");
isimsizFonksiyon(); // "İsimsiz bir fonksiyon" yazısını konsola getirir.
Bu örnek, JavaScript'te fonksiyon kapanışlarının yerel olmayan değişkenlerini başvuru yoluyla yakaladığını gösterir.
Ok işlevleri ilk olarak 6. Baskı - ECMAScript 2015'te tanıtıldı. JavaScript'te işlev yazmak için sözdizimini kısaltırlar. Ok işlevleri anonimdir, bu nedenle oluşturulduktan sonra onları çağırmak için bunlara başvurmak için bir değişken gerekir.
Ok işlevi (arrow fonksiyon) örneği:
// Ok fonksiyonları (arrow functions) `function` anahtar sözcüğünü kullanmadan
// fonskiyon yazmamıza izin verir.
// Buradaki `uzun_ornek` bir anonymous function value sunu gösterir.
const uzun_ornek = (giris1, giris2) => {
  console.log("Merhaba, Dünya!");
  const cikti = giris1 + giris2;

  return cikti;
};

// Parantez yoksa, ok fonksiyonu yalnızca ifadeyi (expression) döndürür
// Buradaki gibi (giris1 + giris2)
const kisa_ornek = (giris1, giris2) => giris1 + giris2;

console.log(kisa_ornek(2, 3)); // 5 döndürür ve ardından "Merhaba, Dünya!" yazdırır
console.log(uzun_ornek(2, 5)); // 7 döndürür

// Bir ok fonksiyonunun yalnızca bir parametresi varsa, parantezler kaldırılabilir.
const parantezsiz = giris => giris + 2;

console.log(parantezsiz(3)); // 5 döndürür
JavaScript'te objeler, fonskiyonlarla aynı şekilde oluşturulur; bu nedenle ojbeler bir fonksiyon objesi olarak bilinirler.
Obje örneği:
let kullanici = {
  adi: "Ahmet",
  yasi: 41,

  selamVer() {
    // "this" burada "mevcut obje" dir
    alert(this.adi);
  }

};

kullanici.selamVer(); // Ahmet
Değişken fonksiyon gösterimi (arguments özel bir değişkendir):
function topla() {
  let x = 0;

  for (let i = 0; i < arguments.length; ++i)
    x += arguments[i];

  return x;
}

console.log(topla(1, 2)); // 3 döndürür
console.log(topla(1, 2, 3)); // 6 döndürür
Anında çağrılan fonksiyon ifadeleri genellikle kapanışları (closures) oluşturmak için kullanılır. Kapanışlar, özelliklerin (properties) ve metotların bir ad alanında (namespace) toplanmasına ve bazılarının özel hale getirilmesine izin verir:
let sayac = (function() {
  let i = 0; // özel özellik

  return {  // genel metotlar
    get: function() {
      alert(i);
    },
    set: function(deger) {
      i = deger;
    },
    artir: function() {
      alert(++i);
    }
  };
})(); // modül

sayac.get();   // 0 gösterir
sayac.set(6);
sayac.artir(); // 7 gösterir
sayac.artir(); // 8 gösterir
JavaScript'te modülleri dışa ve içe aktarma
Export örneği:
/* mymodule.js */
// Bu fonksiyon (işlev), dışa aktarılmadığı için özel olarak kalır
let topla = (a, b) => {
  return a + b;
}

// Değişkenleri dışa aktar
export let adi = 'Metin';
export let yasi = 23;

// Değişkenleri adlarıyla/adlandırılmış olarak dışa aktar
export function ekle(sayi1, sayi2) {
  return sayi1 + sayi2;
}

// Class (sınıfın) dışa aktarılması
export class Carpma {
  constructor(sayi1, sayi2) {
    this.sayi1 = sayi1;
    this.sayi2 = sayi2;
  }

  ekle() {
    return topla(this.sayi1, this.sayi2);
  }
}
İmport örneği:
// Bir özelliği içe dâhil etme/içe aktarma
import { ekle } from './mymodule.js';
console.log(ekle(1, 2));
//> 3

// Çoklu şekilde özellikleri içe dahil etme/içe aktarma
import { adi, yasi } from './mymodule.js';
console.log(adi, yasi);
//> "Metin", 23

// Bir modüldeki tüm özellikleri dahil etme/içe aktarma
import * from './module.js'
console.log(adi, yasi);
//> "Metin", 23
console.log(ekle(1,2));
//> 3