 
			
				01.04.2013, 22:06
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 01.04.2013 
					
					
					
						Сообщений: 56
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Как работает этот код
			 
			
		
		
		
		
var obj={
 x:1,
 y:2,
 z:3
           };
obj.propertyIsEnumerable("toString");
for(w in obj)
 {
   console.log(w);
   alert(w);
 }
Вопрос такой. 
Я ни где не объявлял переменную "w", как браузер понимает, что Я имел виду. И вообще почему он работает? (Пример взят из книги) Я не понял этот пример.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
	
		
	
		
		
		
			
			 
			
				01.04.2013, 22:15
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 01.04.2013 
					
					
					
						Сообщений: 56
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Прикол в том, что если вывести её до цикла, она хранит имя последнего свойства. Почему? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.04.2013, 22:21
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 сегодня в 12:34|Комментир 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 12.04.2011 
					
					
					
						Сообщений: 1,180
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 doox911, 
 потому что объявили ее вы до цикла, в цикле вы уже к ней обращаетесь, и там соответсвенно сохраняется последнее 
		
	
		
		
		
		
		
			
				__________________ 
				оляля, ололо
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.04.2013, 22:30
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 01.04.2013 
					
					
					
						Сообщений: 56
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Так почему соответственно последнее? И не null например? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.04.2013, 23:32
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 сегодня в 12:34|Комментир 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 12.04.2011 
					
					
					
						Сообщений: 1,180
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
var w; // Ты объявил w
// В цикле твоя w каким-нибудь образом меняется (все это условно)
w = 5;
w = 8;
w = 10;
w = 2;
alert(w); // И с чего бы w должнa быть null?
  
		
	
		
		
		
		
		
			
				__________________ 
				оляля, ололо
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.04.2013, 23:55
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 01.04.2013 
					
					
					
						Сообщений: 56
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Я так понимаю, что выполнение инструкции for/in, происходит следующим образом: Перед выполнением вложенной инструкции инструкция for/in обойдёт свойства объекта, и присвоит переменной(глобальной) "i" имя последнего свойства? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				02.04.2013, 00:59
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Тлен 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.01.2010 
					
					
					
						Сообщений: 6,601
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от doox911
			 
		
	 | 
 
	| 
		Я так понимаю, что выполнение инструкции for/in, происходит следующим образом: Перед выполнением вложенной инструкции инструкция for/in обойдёт свойства объекта, и присвоит переменной(глобальной) "i" имя последнего свойства?
	 | 
 
	
 
 Да нет же, блджад, с чего вы это взяли?:
 
var obj={
 x:1,
 y:2,
 z:3
};
alert('before start: ' + window.w ) // undefined
for(w in obj){
    alert('in: ' + w); // x... y... z
}
alert('after end: ' + w ) // z
Цикл выполнился, переменная осталась.
 
P.S. То что при повторном запуске переменная уже назначена - особенность работы скриптового движка сайта - он не пересоздаёт документ каждый раз, а запускает там-же, а тому глобальная переменная остаётся на месте. Используйте f5 перед повторным запуском.  
		
	
		
		
		
		
		
			
				__________________ 
				29375, 35 
 
			 
		
		
		
		
		
						  
				
				Последний раз редактировалось Aetae, 02.04.2013 в 01:04.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				02.04.2013, 01:04
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 01.04.2013 
					
					
					
						Сообщений: 56
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от Aetae
			 
		
	 | 
 
	
		Да нет же, блджад, с чего вы это взяли?: 
var obj={
 x:1,
 y:2,
 z:3
};
alert('before start: ' + window.w )
for(w in obj){
    alert('in: ' + w);
}
alert('after end: ' + w )
 
Цикл выполнился, переменная осталась.
	 | 
 
	
 
 А как же получается, что переменная "w" после undefined присваивает имена свойств объекта, а не что либо другое? 
А точнее, как он понимает что необходимо переменной "w" присвоить имя свойства объекта? (Так написано в книге).  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось doox911, 02.04.2013 в 01:08.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				02.04.2013, 01:22
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Тлен 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.01.2010 
					
					
					
						Сообщений: 6,601
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от doox911
			 
		
	 | 
 
	
		А как же получается, что переменная "w" после undefined присваивает имена свойств объекта, а не что либо другое? 
А точнее, как он понимает что необходимо переменной "w" присвоить имя свойства объекта? (Так написано в книге).
	 | 
 
	
 
 См. мой первый ответ:  for in -  конструкция языка.
 
Ваш вопрос звучит примерно так: как "=" в "a=1" понимает, что надо присвоить переменной "a" значение "1"?  
В принципе вы можете почитать  спецификацию, чтобы на уровне потрохов языка понять как это работает. Но ведь это тоже не ответ. Скорее всего вам придётся спуститься до уровня ассемблера. Но ведь и это не ответ. Тогда вам надо будет понять физический смысл происходящих в процессоре вычислений. Хотя, боюсь, и это не будет ответом...  
		
	
		
		
		
		
		
			
				__________________ 
				29375, 35 
 
			 
		
		
		
		
		
						  
				
				Последний раз редактировалось Aetae, 02.04.2013 в 01:30.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |