Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   помогите понять код с замыканием (https://javascript.ru/forum/misc/32146-pomogite-ponyat-kod-s-zamykaniem.html)

alexandr_poskrobka 04.10.2012 21:09

помогите понять код с замыканием
 
Почему не видна переменная i внутри ф-ции. Знаю что дело в замыкании. Читал но понять не могу. И как можно переделать чтобы i была доступна в function()?
var i=0; 
var arr=[];
for ( i=0; i<5; i++ )
	{

	 arr.push((function()
			{				
				alert(i);
			}
			));
	}
	//alert(i);
	var j=0;
	//alert(arr); //массив содержит  5 expression functions
for ( j=0; j<5; j++ )
	{
		arr[j]();   // вызов expression function  - вызов на месте через выражение  '()'
	}

oneguy 04.10.2012 21:28

Переменная i и так видна внутри функции, но после выполнения цикла она всегда имеет значение 5.

alexandr_poskrobka 04.10.2012 21:34

а как сделать чтобы выводились алерты 0,1,2,3,4? в цикле по переменной j именно надо не быть привязаным к i. Как можно модифицировать?

lord2kim 04.10.2012 21:40

alexandr_poskrobka,
var i=0; 
var arr=[];
for ( i=0; i<5; i++ )
	{

arr.push((function(x) {
 
      return function() {
        alert( x );
      };
 
    })(i));
}
	//alert(i);
	var j=0;
	//alert(arr); //массив содержит  5 expression functions
for ( j=0; j<5; j++ )
	{
		arr[j]();   // вызов expression function  - вызов на месте через выражение  '()'
	}

alexandr_poskrobka 04.10.2012 21:44

Спасибо то что надо


Часовой пояс GMT +3, время: 00:14.