20 Aralık 2012 Perşembe

Caller


Javascript Caller Fonksiyonu 

Fonksiyonların nasıl çağrıldığını anlamak için, alt özellikleri olan "caller" kontrol edilir, eğer herhangi bir fonksiyon içinde çağrılmadıysa, "null"
değerini döndürür.Bu özellik "fonksiyonAdı.caller" biçiminde kullanılır:

>>> var merhaba = function(){
return merhaba.caller;
}
>>> merhaba()
null
>>> (function(){ return merhaba() })()
(function(){ return merhaba() })()

 Örnekte, "merhaba" adında, kendisini çağıran fonksiyonu döndüren bir fonksiyon oluşturduk.Global blokta çağırdığımız satırda "null" değer
dönerken, diğerinde fonksiyonun kendisi döndü.
Örnek olarak, yazdığımız fonksiyonun başka bir fonksiyon içinden çağrılmasını engelleyebiliriz;

>>> var merhaba = function(){
if(merhaba.caller!=null)
return "Bu fonksiyona başka bir fonksiyonun içinden erişemezsiniz."
return "Merhaba!"

 Dizi konusu gibi, ileride detaylıca inceleyeceğimiz konulardan biri de koşullar.Yukarıdaki örneğin ilk iki satırında, "merhaba.caller" değerini kontrol
ettik ve eğer "null" değilse, yani bir başka fonksiyonun içinden çağrı yapıldıysa, "Merhaba" yerine uyarı metni döndürdük."return" komutu verildikten
sonra yorumcunun fonksiyondan çıktığını hatırlayalım.

Bir sonraki yazı: Internet Explorer ve eval() İstisnası ...

15 Aralık 2012 Cumartesi

Prototype ve Browser Nesneleri


Prototype ve Browser Nesneleri

Javascript'in disable olmadığı durumları saymazsak, browserlar her HTML belgesinde javascript komutlarının çalışmasını sağlayan bir zemin
oluşturur.String,Number,Function,Array,Object nesneleri browser sözettiğimiz çekirdekte yer alan nesnelerden birkaçıdır.
Yazdığımız her sayı Number objesinden, her yazı String objesinden türer.Ve tahmin edeceğiniz gibi, bu değerlerin methodları, çekirdekteki
nesnelere bağlıdır.String nesnesinin methodlarından birini deneyelim:

>>> String
String()
>>> String.prototype.replace
replace()

 String nesnesinin prototype objesindeki replace fonksiyonuna erişip kontrol ettik.Şimdi de oluşturacağımız string değerinde replace methodunun
kullanımını inceleyelim:

>>> "Merhaba Dünya".replace
replace()
ECMAScript standartını kullanan dillerden biri de Actionscript'tir.Bu dil de String,Number gibi objeler oluşturur fakat geliştiricinin bu nesneleri
değiştirmesi kısıtlanmıştır. Neyse ki javascript için böyle bir durum söz konusu değil, browser nesnelerini dilediğimiz gibi değiştirebilmekteyiz.Örnek
olarak Number objesine bir method ekleyelim:

>>> Number.prototype.topla = function(sayiDegeri){
return this+SayiDegeri
}
Number nesnesinin iskeletine "topla" adında bir fonksiyon ekledik.Böylece, tüm sayılar için pratik bir toplama methodu yaratmış olduk, deneyelim:

>>> (4).topla(8)
12
>>> 4.0.topla(8)

Aklınıza şu soru gelmiş olmalı: Peki ondalık hanelerin nokta işaretleriyle methodlarınki karışmaz mı? Evet karışır.Bunun için sayılar parantez içine
alınır, veya ondalık hanesinden sonra method yazılır.
Örnekte gördüğünüz gibi, Number sınıfından türeyen sayı değerlerinin altında topla methodu kendiliğinden gelmektedir.
Küçük bir ipucu: prototype Obje tipindedir yani Object sınıfından türemiştir.Şimdi browser'ımızı heyecanlandıracak birkaç deneme yapalım:

>>> Object.prototype.deneme = "foo bar"
>>> "".deneme
"foo bar"

Örnekte, Object sınıfının iskeletine bir ekleme yaptık ve böylece Object sıfından türemiş olan tüm iskeletlere değişikliği uyguladık.Yani, deneme
fonksiyonu tüm iskeletlere eklendi.Bir sonraki satırda oluşturduğumuz string değeri kontrol ettik ve bu durumu doğruladık.
Protype'lar hakkında genel bilgi sahibi oldunuz.Obje türlerini inceledikten sonra prototype'lara tekrar dönüp deney yapmanızda fayda var.

Bir sonraki yazı: Caller 



14 Ekim 2012 Pazar

Prototype


Prototype nedir ?
prototip, ilk örnek, asıl örnek, orijinal

javascript'de objelere yeni değişkenler ve metodlar ekleyeme yarar. object oriented javascript'in temelini oluşturur bu terim. aynı zamanda prototype adıyla (prototype javascript framework) sonrasında gelen jquery, yui gibi yeni nesil javascript kütüphanelerinin öncülüğünü yapan bir araç vardır. daha hızlı javascript yazılması sağlar. daha hızlı yazılmasını javascriptteki uzun uzun yazılan ve çok kullanılan css selection özelliklerini $() gibi fonksiyonlara indirerek ve kullanılabilecek her yerde json kullanarak sağlar.



Prototype'ı bir binanın iskeletine benzetebiliriz, hatta bu benzetmeye tahmin ediyorum birkaç yüz dökümanda daha rastlayabilirsiniz çünkü
prototype benzetmeden daha öte, fonksiyonların iskeletidir.


Prototype değerlerinin tipi objedir.Yani bir objeyi alıp, bir fonksiyonun iskeleti olarak kullanmak mümkündür.Tabii bunun tam tersi durum da
sözkonusu.


Fonksiyonların klonlanarak objeye dönüştürülmesini anlatırken bir detayı atlamıştık; objenin özellikleri fonksiyonun tanımlandığı blokta olmak
zorunda değil.Oluşturduğumuz fonksiyonun iskeletine ulaşabilir ve çeşitli eklemeler yapabiliriz.Şimdi adım adım bir fonksiyon yazalım ve konsolun
döndürdüğü değerleri yorumlayalım:

>>> var kisi = function(adsoyad,yas,dogumyeri){
this.adsoyad = adsoyad;
this.yas = yas;
this.dogumyeri = dogumyeri;
}
>>> kisi.prototype
Object: There are no properties to show for this object.

Örnekte kisi adında bir fonksiyon oluşturup içine adsoyad,yas,dogumyeri özelliklerini yazdık.Ardındaki satırda prototype'ı incelediğimizde, boş bir
objenin döndüğünü görüyoruz.Bu durumdan şunu çıkarmalıyız, iskeletin inşası prototype objesi dışında yapılamaz.Veya şöyle özetleyelim,
fonksiyonun içinde iskelet oluşturamayız.

>>> kisi.prototype.meslek = null;
Yukaridaki örnekte prototype objesinin altında bir alan açarak, kisi fonksiyonuna meslek adında bir özellik ekledik.
>>> kisi.prototype

Object: (meslek = null)
>>> selcuk = new kisi("selçuk koçulu",48,"mardin");
>>> selcuk.meslek
null
 Bu örnekteyse selcuk adında bir obje oluşturduk ve meslek özelliğini sorguladık.Dönen sonucun null -bu bizim belirlediğimiz bir varsayılan
değerdi- olduğunu görüyoruz.
Buradaki problem, iskelete sonradan eklenen meslek özelliğini constructor'a nasıl dahil edeceğimiz.Bu iş için constructor'ın yeniden yazılması
kaçınılmazdır;

>>> var kisi = function(adsoyad,yas,dogumyeri,meslek){
this.adsoyad = adsoyad;
this.yas = yas;
this.dogumyeri = dogumyeri;
this.meslek = meslek;
}
>>> fikretkizilok = new kisi("fikret kızılok","60","İstanbul","Müzisyen");
>>> fikretkizilok.meslek
"müzisyen"

Bu örnekte dikkat etmemiz gereken, kisi fonksiyonunun eski iskeleti devralması.Peki bu durumda henüz tanımlanmamış fonksiyonların iskeleti
oluşturulabilir mi? Evet, oluşturulabilir.
Bunu denemek için yeni bir fonksiyon yazalım:

>>> kargo.prototype.alan = null;
>>> kargo.prototype.gonderen = null;
>>> kargo.prototype.kargoicerigi = null;
>>> function kargo(alan,gonderen,kargoicerigi){
this.alan = alan;
this.gonderen = gonderen;
this.kargoicerigi = kargoicerigi;
}
>>> kargo.prototype.ucret
0

Görüldüğü gibi, undefined değeri olan bir tanıtıcı altında iskelet oluşturduk ve ardından bu tanıtıcıya fonksiyon değeri verdik.Son satırda ise,
tanıtıcı değer almadan oluşturduğumuz iskeletin çalışır durumda olduğunu onayladık.Biraz önce yazdığımız kisi nesnesinden de faydalanarak
kargo'nun kullanımına bir örnek verelim:

>>> var azerkoculu = new kisi("azer koçulu",20,"kaş","web geliştirici");
>>> var billgates = new kisi("bill gates",53,"seattle","işadamı");
>>> var yeniKargo = new kargo(azerkoculu,billgates,"mozilla stickers");
...
Bir sonraki yazı Prototype ve Browser Nesneleri
 


Call ile kalıtım


Kalıtım ilişkileri kurmak için apply'den daha çok tercih edilen methoddur.Mantık olarak pek farklılık yok, istenen objeye "scope" ve argümanlar
gönderiliyor:

>>> var kisi = function(adsoyad,yas,dogumyeri){
this.adsoyad = adsoyad;
this.yas = yas;
this.dogumyeri = dogumyeri;
}
>>> var oyuncu = function(adsoyad,yas,dogumyeri,takim,skor){
this.takim = takim;
this.skor = skor;
kisi.call(this,adsoyad,yas,dogumyeri);
}
>>> var kemal = new oyuncu("kemal akın",15,"antalya","maviler",3);
>>> var ege = new oyuncu("ege akın",10,"izmir","kırmızılar",2);
>>> kemal.takim
maviler
>>> ege.dogumyeri
izmir

Örnekte gördüğünüz gibi, apply ile temel farklılık call methodunun argümanları serbest biçimde göndermemizi sağlaması.

...
Bir sonraki yazı Prototype

9 Ağustos 2012 Perşembe

Apply

Apply
apply Javascript'in isviçre çakisidir.Bu özellik sayesinde, fonksiyonlar birbirlerinin yapilarinin üstüne insa edilebilir ve bunun saymakla bitmez faydalarindan biri, modern object oriented dillerinin kalitim özelligini bize saglamasidir.Örnegin, kimlik bilgileri içeren "kisi" objesi üzerine, skor ve benzeri bilgileri içeren "oyuncu" objesi olusturalim:
>>> var kisi = function(adsoyad,yas,dogumyeri){ this.adsoyad = adsoyad;
this.yas = yas; this.dogumyeri = dogumyeri;
}
>>>var arda = new kisi("Arda Koçulu",17,"Kars");
>>>arda.dogumyeri
"Kars"
Kisi objesini inceleyelim; bir fonksiyon olusturduk ve argüman tünelinden gelen üç veriyi bu fonksiyona alt deger olarak atadik.Ardindaki satirda "arda" degerini "new" operatörüyle yeni bir kisi olarak tanimladik.Kisi objesini olusturdugumuza göre, oyuncu objesine de geçebiliriz:
>>> var oyuncu = function(adsoyad,yas,dogumyeri,takim,skor){ this.takim = takim;
this.skor = skor; kisi.apply(this,arguments);
}
>>>var kemal = new oyuncu("kemal akin",15,"antalya","maviler",3);
>>>var ege = new oyuncu("ege akin",10,"izmir","kirmizilar",2);
>>>kemal.takim
maviler
>>> ege.dogumyeri izmir
Oyuncu adinda bir nesne olusturduk, argüman tünelinden bekledigimiz degerleri taniticilarina tanimladiktan sonra, takim ve skor alt degerlerini atadik.Ardindan gelen satirda ise, kisi objesinin apply methodunu çalistirdik ve "this","arguments" argümanlarini gönderdik. "this" argümani, kisi objesinin hangi fonksiyon tarafindan çagrildigini göndermek için kullanilir.arguments Argümaniysa, apply methoduyla çagrilan fonksiyonun argüman tünelinden bekledigi argümanlari göndermemizi saglar."arguments" degeri, oyuncu fonksiyonuna gelen degerleri içerdiginden, "oyuncu"
fonksiyonuna gelen tüm argümanlar "kisi" fonksiyonuna gönderililir.
Call
call fonksiyonu tipki apply gibi, fonksiyonlari kendi belirledigimiz etki alani ve argümanlarla çalistirmamizi saglar.Bir problemin çözümünü anlatarak örnek yapalim, javascript arguments dizisinin alt methodlarini kullanmamiza olanak tanimaz.Deneyelim;
>>> (function(){
alert(arguments.slice); // undefined deger döner })("merhaba","dünya");
Parantez bloklari içindeki fonksiyonumuza iki metinsel deger gönderdik.Fonksiyondaysa, gelen argüman listesinin slice methodunu kontrol ediyoruz ve tanimlanmamis oldugunu görüyoruz.
Simdi bu problemin çözümünü inceleyelim:
>>> (function(){
alert(Array.prototype.slice.call(arguments,1) // dönen deger: ["dünya"] })("merhaba","dünya");
slice Methodunun islevi o kadar önemli degil, diziler konusunda inceliyoruz.Burada dikkat etmeniz gereken, prototipteki fonksiyon kaynagina ulasmamiz ve bu fonksiyonu call methodu ile çagirmamiz.call nesnesine gönderdigimiz argümanlardan birincisi etki alanini belirliyor, digeri ise slice methodunun argüman tünelinden bekledigi ilk deger. Gördügünüz gibi, call methodu applyden farkli olarak argümanlari topluca liste olarak almiyor, ilk argümani etki alani degeri kabul edip diger bütün argümanlari çalistirdigi fonksiyona aktariyor.
...  
bir sonraki yazı Call ile kalitim

Disaridan Erisime Kapali Özellikler

Disaridan Erisime Kapali Özellikler

C Tabanli programlama dillerindeki class yapilarinda, methodlarin disarindan erisime açik olup olmadigi belirtilebilir.ECMAScript'in yeni sürümündeki class yapilari da public/private alt method ve degerleri destekler.
Su an kullandigimiz sürümde de public/private özellikler olusturulabiliyor, bunun için fonksiyon bloklarinin etki alanlarindan faydalanilir;
>>> function test(){
var _deger = "merhaba dünya!"; this.degeriGetir = function(){ return _deger;
}
}
Yukaridaki örnekte test adinda bir fonksiyon olusturduk ve biri disaridan erisime kapali, iki deger olusturduk.
>>>test1 = new test();
>>>test1._deger undefined
>>>test1.degeriGetir() "merhaba dünya!"
...

 Bir sonraki yazı Apply

6 Ağustos 2012 Pazartesi

Fonksiyonlar için method ve alt değişken tanımlamak

ECMAScript'te, fonksiyonların her biri diğer dillerde rastladığımız "class"'lara benzer, alt değerler tanımlanabilir ve new operatörüyle klonlanabilir.
Alt değer tanımlamak için, fonksiyonun içindeki "this" değerine erişilir.Alt değerler fonksiyon bloğunun dışında da tanımlanabilir. Bir örnek;
>>> var islemci = function(){
this.aciklama = "merhaba dünya!"
this.toplama = function()
{
return arguments[0]+arguments[1];
}
this.cikarma = function(sonuc)
{
return arguments[0]-arguments[1];
}
}
>>> var islem1 = new islemci();
>>> islem1.toplama(3,5);
8
>>> islem2.cikarma(3,5);
-2
islemci adında, toplama cikarma methodlarını içeren bir fonksiyon yarattık ve ardındaki satırda, islem1 tanıtıcısına yeni bir islemci objesini
atadık.Bu kez, az önce yazdığımız islemci objesinde, prototypeı kullanarak yeni bir alt method yaratalım;
 >>> islemci.prototype.carpma = function(){
return arguments[0]*arguments[1];
}
>>> var islem2 = new islemci();
>>> islem2.carpma(3,5);
15
 prototype Klonlanabilir nesnelerin ortak etki alanına sahip olmasını sağlayan bir değerdir.Eğer prototypeı kullanmadan tanımlama yaparsak, alt
methodu olduğumuz objenin etki alanına yani içerdiği değerlere erişemeyiz.Buna bir örnek verelim:
 >>> islemci.prototype.aciklamayiGoster1 = function(){
return this.aciklama;
}
>>> islemci.aciklamayiGoster2 = function(){
return this.aciklama;
}

 Görevleri islemci objesine ait aciklama değerini döndürmek olan etki alanları farklı, iki tane fonksiyon tanımladık.İlk tanımladığımız fonksiyonu
deneyelim:
 >>> islemci.aciklamayiGoster1()
"merhaba dünya!"
 Gördüğünüz gibi, islemci nesnesine prototype köprüsünden erişti ve içerdiği değerleri aldı.Diğerini deneyelim:
 >>> islemci.aciklamayiGoster2()
undefined
Tanımlanmamış değer döndürdü çünkü etki alanı kendisiydi.sadece kendi içindeki ve window altındaki değerlere ulaşabilirdi.Elbette bu problem
çözümsüz değil, call ve apply methodları fonksiyonların etki alanını belirlememizi sağlar.

...
Bir sonraki konu Dışarıdan Erişime Kapalı Özellikler










1 Ağustos 2012 Çarşamba

Argümanlar

JAVASCRİPT FONKSİYON ARGÜMANLARI

Fonksiyonlar, sadece faaliyet alanlarında erişilebilir durumda olan değerler alabilirler.Bu değerlerin tanıtıcısı, fonksiyon oluşturulurken argüman
tünelinde yazılır.Fakat gönderilen argümanlar için tanıtıcı belirtmek zorunlu değildir, tanıtıcı olsun veya olmasın, fonksiyon içindeki "arguments"
tanıtıcılı değişken argüman tünelindeki tüm verileri saklar.
Diziler, tek tanıtıcının altında veri parçalarını tanıtıcıya ihtiyaç kullanmadan saklamayı sağlayan veri türüdür, örnek olarak herbiri tek başına bir
değer olan birkaç elmayı tutan sepeti düşünelim.Sepeti tutan el, programımızı çalıştıran browser olmalı :) Fonksiyonlardan bir sonraki konu
başlığında dizileri daha detaylı inceleyeceğiz.
Az önce sözünü ettiğim "arguments" değeri, fonksiyonların argüman tünelinden gelen tüm değerleri sıralı olarak saklayan bir dizidir.Tanıtıcısı olsun
veya olmasın, browserlar gönderilen tüm argümanlara erişmemizi sağlar.Bir örnek;

 >>> var argumanlar = function(){
return arguments;
}
>>> argumanlar(3,5);
3,5
>>>

Örnekte "argumanlar" adında, tek işlevi kendisine gelen argümanları geri döndürmek olan bir fonksiyon oluşturduk ve bu fonksiyona gönderdiğimiz
argümanların bize dizi tipinde geri döndüğünü gördük.Toplama örneğini "arguments" dizisinin elemanlarını seçip işlem yaptırarak yeniden ele
alalım:

>>> var toplama = function(){
return arguments[0]+arguments[1];
}
>>> toplama(3,5);
8

Bu örnekte arguments dizisinin ilk iki elemanını, tanıtıcıları olan sıra numaralarıyla seçtik ve toplamlarını bulup geri döndürdük.Dizileri henüz iyice
anlamadığınızı düşünüyorsanız endişelenmeyin, dizileri ayrı bir başlıkta detaylı biçimde inceleyeceğiz.
Fonksiyonların içinde kaç argüman tanımlandığını bulmak içinse, fonksiyon tanıtıcısının alt değişkeni olan .length değeri kullanılır.Örnek olarak,
argüman tünelinde tanımlanan değişkenlerin sayısını gönderen bir fonksiyon yazalım:

>>> function test(arguman1,arguman2){
return test.length;
}
>>> test()
2

 ...
 Bir sonraki konu : Fonksiyonlar için method ve alt değişken tanımlamak




28 Temmuz 2012 Cumartesi

Fonksiyon Parantez Blokları


Fonksiyon tipindeki verilerin çalışmasını incelediğimiz örneklerde parantezlerin sağladığını görüyoruz.Parantezler işlevsel olarak pek çok konuda
fayda sağlasa da, pek çok zaman yazılan kodun daha anlaşılır olması için blok oluşturmada kullanılır.Önce ne gibi işlevlerde kullandığımıza
gözatalım.Birinci örnek matematiksel işlemlerde gruplama yaparken kullanılan parantezler üzerine:
>>> 1+2*3
7
>>> (1+2)*3
9
 İkinci örnek, sayısal değerlerin ondalık kısmıyla methodların karışması problemine parantez çözümü:
>>> 1.toString()
missing ; before statement
[Break on this error] 1.toString()
javascript: with ... (line 1)
>>> 1.0.toString()
"1"
>>> (1).toString()
"1"
Gelelim üçüncü örneğe.Ecmascript'te her fonksiyon bloğu parantezler içine alınabilir.Ve elbette, parantez içine alınmış kod bloğuna çalıştırma
komutu gönderilebilir.Bu yöntem daha sade ve temiz görünen kodlar yazmayı sağlar, çünkü fonksiyonu yazdıktan sonra tanıtıcıyı çağırmaya gerek
duyulmaz.

Klasik yöntemle yazılan bir fonksiyonun çağırma işlemiyle, parantez bloğunun kodlarını karşılaştıralım:
>>> var merhaba = function(){
return "Merhaba"
}
>>> merhaba();
Merhaba
>>> (var merhaba = function(){
alert("Merhaba");
})();
"Merhaba"
İlk örnekte fonksiyonu tanımladık ve ardından tanıtıcısını kullanarak çalıştırdık, ikinci örnekteyse fonksiyonu parantez bloklarının içine alıp
çalıştırdığımız için, tanıtıcıyla çağırma yaptığımız satıra gerek kalmadı.Tahmin edeceğiniz üzere, aslında parantez bloklarını kullanırken tanıtıcı
kullanılmayabilir:
>>> (function(){
alert("Merhaba");
})();
"Merhaba"

...

 Bir sonraki konu Argümanlar

27 Temmuz 2012 Cuma

Fonksiyonlar


Fonksiyonlar
C tabanlı dillerde her iş veya alt iş fonksiyonlar tarafından yürütülür.Fonksiyonların genel kullanım şekli, argüman tünelinden veri gönderip, bilgi
çıkışı beklemektir.Genel yazılışı inceleyelim:
function(argümanlar){ return argüman }
Gönderilen argümanlar herhangi bir türde olabilir, sayı, dizi fonksiyon...Buradaki tek dikkat unsuru argümanların her birine ayrı tanıtıcı
belirlenmesidir.Argümanlar birden fazlaysa birbirlerinden virgülle ayrılmaları gerekir:
(argüman1,argüman2,argüman3...) 
ECMAScript'in kullandığımız sürümünde, argümanlar için PHP veya Python dillerinde olduğu gibi varsayılan değer atanamaz.Değer atanmayan
argümanların tanıtıcıları yine tanımlanır ancak "undefined" türünde olurlar.Argümanlar sadece tanımlandıkları fonksiyonda çalıştırılabilirler.Global
blokta tanımlanan değişkenlere fonksiyonlardan erişilebilir.
Bir fonksiyonda en son, fonksiyondan geriye değer döndürülmesini sağlayan "return" ifadesi çalıştırılır.Eğer bu ifadeden sonra fonksiyonun içeriği
bitmediyse, ECMAScript bu içeriği görmezden gelir.
Fonksiyonlar çeşitli biçimlerde tanımlanabilir, ilk olarak tanıtıcı ve eşit işareti kullanarak klasik biçimde tanımlayalım:
var islem = function(){}
Biraz daha pratik olan diğer yöntemdeyse pek çok programlama dilinden alışık olduğumuz biçimde tanımlıyoruz:
function islem(){}
Örnek olarak argüman tünelinden aldığı iki sayının toplamı geriye döndüren bir fonksiyon tanımlayalım: 
function topla(sayi1,sayi2){
return sayi1+sayi2
}
Bu biçimlerde tanımlamalar genelde tercih edilse de, bazen programın akışına göre şekillenmesi gereken fonksiyon tanımlamaya ihtiyaç
duyulur.Bu durumda tanıtıcıların program çalıştırılmadan önce belirlenmek zorunda olması, pek çok dilde rastladığımız bir kısıtlamadır.Fakat ECMAScript'in Function() nesnesi sayesinde, kod bloğu tanıtıcı string tipinde belirtilerek, programın akışına göre şekillenen fonksiyonlar
tanımlanabilmektedir:
var topla = new Function("sayi1","sayi2","return sayi1+sayi2")
Fonksiyonların atama işlemleri diğer veri türleriyle aynı olsa da, fonksiyona ulaşıp çalıştırma işlemi ayrı biçimdedir.Bir fonksiyonu çalıştırmak için
tanıtıcıyla beraber argüman tüneli kullanılır.Burada argüman tünelinin veri transferi yapıp yapmaması farketmez.Örnek olarak hazırladığımız topla
fonksiyonunu kullanalım:
var sonuc = topla(5,4)
9
"sonuc" değişkeni integer türünde 9 değerini aldı.
Örnekteki topla() fonksiyonunda hem bilgi girişi hem de bilgi çıkışı yapılıyor, şimdi bilgi girişi veya çıkışı yapılmayan bir örneği inceleyelim:
>>> var durum = 'Negatif';
>>> var durumuAyarla = function(){
durum = 'pozitif'
}
Bu örnekteyse programın global bloğunda "durum" adında bir değişken ve "durumuAyarla" adında, "durum" değişkeninin değerini string tipinde
"pozitif" değeriyle değiştiren bir fonksiyon oluşturuluyor.Çalıştırıp deneyelim;
>>> durumuAyarla()
undefined
>>> durum
'pozitif'

...
Bir sonraki konu Parantez Blokları 
 
 
 
 

İleri seviye javascript dersleri başlangıç


Bu dökümanda Javascript'in deneyselliğe dayanan doğasına uygun biçimde, web tabanlı program üretmenizi sağlayacak bilgileri vermeye
çalıştım. Özellikle üstünde durmanız gereken konu olan fonksiyonlarda, kitaplarda yeralmayan ileri teknik ve pratikleri anlattım.
Dökümandan iyi verim almak için, Rainbow9'dan faydalanabilirsiniz. Rainbow9, geçen yıl hazırladığım, javascript deneyleri yapmayı ve
web tabanlı programlar geliştirmeyi sağlayan bir programdır.İsterseniz Firefox'un Firebug eklentisinden de faydalanabilirsiniz.Rainbow9,
Firebug'ın aksine bazı mobil tarayıcılar dahil tüm tarayıcılarda kurulmaya gerek olmadan çalışır.
Rainbow9: http://www.rainbow9.org Firebug: http://www.getfirebug.com
Dökümanı okuyup bitirdikten sonra daha deneysel ve iyi tekniklerle kod yazacağınızı, kod standartınızı geliştireceğinizi umut ediyorum.
Sabır ve gayretlerinizin karşılığını almanız dileğiyle.

İçindekiler;

Giriş
Fonksiyonlar
  Parantez Blokları
  Argümanlar
    Fonksiyonlar İçin Method ve Alt Değişken Tanımlamak
  Apply
  Call
  Prototype
  Caller
  Bölüm Sonu Pratikleri
Diziler
Nesneler
İleri Seviye OOP