Arama butonu
Bu konudaki kullanıcılar: 1 misafir
3
Cevap
647
Tıklama
0
Öne Çıkarma
JavaScript Clousres
L
11 yıl (167 mesaj)
Teğmen
Konu Sahibi

Arkadaşlar merhaba,http://www.w3schools.com/js/js_function_closures.asp adresindeki Javascript Clousures başlığı altındaki örneği anlamadım:


Anladığım kadarını size söyleyeyim. Yanlışlarımı düzeltin varsa eksiğim söyleyin lütfen.add variable'ı, self invoking bir fonksiyona refer ediyor. Self invoking bir fonksiyon yalnızca bir defa çalıştırılır. Bu fonksiyon en son başka bir fonksiyon return ediyor. Dolayısıyla add() fonksiyonunun scope'undan asla çıkılmaz diyebiliriz bu fonksiyonda benzer şekilde başka bir function expression return etmediği müddetçe, doğru mu ? counter variable'ına hala nasıl erişebiliniyor? add variable'ı artık return edilen fonksiyona mı refer ediyor? Bunun mantığı nedir yani açıklayabilir misiniz?


 
<!DOCTYPE html>
<html>
<body>

<p>Counting with a local variable.</p>

<button type="button" onclick="myFunction()">Count!</button>

<p id="demo">0</p>

<script>
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();

function myFunction(){
document.getElementById("demo").innerHTML = add();
}
</script>

</body>
</html>


DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil





< Bu mesaj bu kişi tarafından değiştirildi loves_oi -- 11 Eylül 2015; 12:43:41 >

L
11 yıl (167 mesaj)
Teğmen
Konu Sahibi

quote:

Orijinalden alıntı: loves_oi

Arkadaşlar merhaba,http://www.w3schools.com/js/js_function_closures.asp adresindeki Javascript Clousures başlığı altındaki örneği anlamadım:


Anladığım kadarını size söyleyeyim. Yanlışlarımı düzeltin varsa eksiğim söyleyin lütfen.add variable'ı, self invoking bir fonksiyona refer ediyor. Self invoking bir fonksiyon yalnızca bir defa çalıştırılır. Bu fonksiyon en son başka bir fonksiyon return ediyor. Dolayısıyla add() fonksiyonunun scope'undan asla çıkılmaz diyebiliriz bu fonksiyonda benzer şekilde başka bir function expression return etmediği müddetçe, doğru mu ? counter variable'ına hala nasıl erişebiliniyor? add variable'ı artık return edilen fonksiyona mı refer ediyor? Bunun mantığı nedir yani açıklayabilir misiniz?


 
<!DOCTYPE html>
<html>
<body>

<p>Counting with a local variable.</p>

<button type="button" onclick="myFunction()">Count!</button>

<p id="demo">0</p>

<script>
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();

function myFunction(){
document.getElementById("demo").innerHTML = add();
}
</script>

</body>
</html>




O fonksiyonun içinden de başka bir fonksiyon return edince olmadı. O zaman şöyle bir çıkarımda bulunuyorum : sadece self invoking fonksiyonun içinden bir function expresssion return edebiliriz. normal bir fonksiyonun içinden function expression return etmeye çalışırsak "function declaration" return ediliyor.

Kod şöyle :

 
<!DOCTYPE html>
<html>
<body>

<p>Counting with a local variable.</p>

<button type="button" onclick="myFunction()">Count!</button>

<p id="demo">0</p>

<script>
var add = (function () {
var counter = 0;
return function ()
{
var semih=0;
if(counter >5)
{
return function(){ semih += 5; }
}
return counter += 1;}
}
)();

function myFunction(){
document.getElementById("demo").innerHTML = add();
}
</script>

</body>
</html>




counter > 5 iken output böyle :
 
function(){ semih += 5; }




Bu kod ise çalışmıyor, self invoking fonksiyon, self invoking fonksiyon return etsin, o da normal bi fonksiyon return etsin dersem çalışmıyor
<!DOCTYPE html> 
<html>
<body>

<p>Counting with a local variable.</p>

<button type="button" onclick="myFunction()">Count!</button>

<p id="demo">0</p>

<script>
var add = (function () {
var counter = 0;
return function ()
{
var semih=0;

return function(){ semih += 5; }


}()
)();

function myFunction(){
document.getElementById("demo").innerHTML = add();
}
</script>

</body>
</html>


Bu mesaja 1 cevap geldi.
W
11 yıl (1760 mesaj)
Binbaşı

JavaScript bilmiyorum ama, senin de dediğin gibi, programın izleyeceği yoldaki en son (the most inner ?) expression'ı atıyor değişkenine. En azından düz programlama mantığıyla öyle olması lazım. Örneğin

 
var add = (function () {
var counter = 0;
return function ()
{
var semih=0;
return function(){ semih += 5; }
}()
)();

Bu kodun şunu yapması lazım;
semih değişkenini 5 arttıran fonksiyon parçacığını return edecek (add'e)
Çünkü en içerde o var (return function(){ semih += 5; }).
Muhtemelen şöyle bir kod çalışacaktır (fonksiyonun yazılımından sonra);

semih = 3;
add(); // Buradan sonra semih'in değeri 8 olmalı.


Bu mesaja 1 cevap geldi.
L
11 yıl (167 mesaj)
Teğmen
Konu Sahibi

quote:

Orijinalden alıntı: welrocken

JavaScript bilmiyorum ama, senin de dediğin gibi, programın izleyeceği yoldaki en son (the most inner ?) expression'ı atıyor değişkenine. En azından düz programlama mantığıyla öyle olması lazım. Örneğin

 
var add = (function () {
var counter = 0;
return function ()
{
var semih=0;
return function(){ semih += 5; }
}()
)();

Bu kodun şunu yapması lazım;
semih değişkenini 5 arttıran fonksiyon parçacığını return edecek (add'e)
Çünkü en içerde o var (return function(){ semih += 5; }).
Muhtemelen şöyle bir kod çalışacaktır (fonksiyonun yazılımından sonra);

semih = 3;
add(); // Buradan sonra semih'in değeri 8 olmalı.

Yukarıda da belirtttiğim üzere bu kod çalışmıyor. Koskoca donanımhaberden bi js ci çıkmadı yaw helal olsun ayrı bir başlık bile yok js için vay be



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.