Snippet bir:
function a() {
alert('A!');
function b(){
alert('B!');
}
return b(); //return nothing here as b not defined a return value
}
var s = a(); //s got nothing assigned as b() and thus a() return nothing.
alert('break');
s(); // s equals nothing so nothing will be executed, JavaScript interpreter will complain
'b ()' ifadesi, 'B!' metnini içeren bir iletişim kutusunu gösteren 'b' adlı işlevi çalıştırmak anlamına gelir.
'return b ()' ifadesi; 'b' adlı bir işlevi yürütmek ve sonra hangi 'b' işlevinin döndüğünü döndürmek anlamına gelir. ama 'b' hiçbir şey döndürmez, sonra bu 'return b ()' ifadesi de hiçbir şey döndürmez. Eğer b () bir sayı döndürürse, o zaman 'dönüş b ()' de bir sayıdır.
Şimdi 's', 'a ()' dönüşünün değeri atanır, bu da 'b ()' döndürür, bu hiçbir şey değildir, yani 's' hiçbir şeydir (JavaScript'te bu aslında bir şeydir, 'tanımsız''dır. JavaScript'ten "s" nin hangi veri türünü yorumlamasını istediğinizde, JavaScript yorumlayıcısı size "s" nin tanımsız olduğunu söyleyecektir.) "s" tanımsız olduğundan, JavaScript'ten bu ifadeyi "s ()" yürütmesini istediğinizde, JavaScript'ten 's' adlı bir işlevi çalıştırmasını istiyorsunuz, ancak burada 's' bir işlev değil, 'tanımsız', bu nedenle JavaScript şikayet edecek, "hey, s bir işlev değil, nasıl olduğunu bilmiyorum bunun için "Yakalanmamış TypeError: s bir işlev değildir" hata mesajı JavaScript tarafından gösterilir (Firefox ve Chrome'da test edilmiştir)
Snippet İki
function a() {
alert('A!');
function b(){
alert('B!');
}
return b; //return pointer to function b here
}
var s = a(); //s get the value of pointer to b
alert('break');
s(); // b() function is executed
şimdi, 'a' işlevi 'b' adlı bir işleve bir işaretçi / takma adı döndürür. bu nedenle 's = a ()' çalıştırıldığında, 's' b'yi gösteren bir değer alır, yani 's' şimdi 'b'nin bir takma adıdır,' s 'çağrısı' b 'çağrısına eşittir. yani 's' artık bir işlevdir. 'S ()' çalıştırmak, 'b' işlevini çalıştırmak anlamına gelir ('b ()' ile aynı), 'B!' görünecektir (yani 'uyarı (' B! ');' b 'fonksiyonundaki ifade)