 
			
				28.07.2013, 22:28
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 30.01.2008 
					
					
					
						Сообщений: 230
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Создание примитива с таким же именем как у уже существующего свойства функции
			 
			
		
		
		
		В примере ниже операция ++ сработает на локальной переменной test, а не на свойстве test объекта функции. Потому что test новая переменная, которая получила значение свойства, но никак не является ссылкой на свойство. 
function test(){
    var test = arguments.callee.test;
    test++;
}
Каким свойством будет записана локальная переменная test, если свойство test у функции уже существует?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.07.2013, 23:51
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 22.03.2012 
					
					
					
						Сообщений: 3,744
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от lancer
			
		
	 | 
 
	| 
		Каким свойством будет записана локальная переменная test, если свойство test у функции уже существует?
	 | 
 
	
 
 ты о чём вообще 
локальная переменная будет хранить то, что ей присвоили, иначе undefined 
написав arguments.callee.test ты уже обращаешься к свойству, в приведённом примере туда ляжет undefined (если ранее присвоишь другое значение, то оно)
 http://es5.javascript.ru/x8.html#x8.12
	
 
	| 
		
			 Цитата: 
		
	 | 
 
	
		При вызове внутреннего метода [[GetOwnProperty]] объекта O с именем свойства P выполняются следующие шаги: 
 
1. Если у O нет собственного свойства с именем P, вернуть undefined. 
...
	 | 
 
	
 
  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				29.07.2013, 00:47
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 х.з 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 21.11.2010 
					
					
					
						Сообщений: 4,588
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от lancer
			
		
	 | 
 
	| 
		Каким свойством будет записана локальная переменная test, если свойство test у функции уже существует?
	 | 
 
	
 
 слова: объект вызова о чём то говорят?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				29.07.2013, 01:04
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 30.01.2008 
					
					
					
						Сообщений: 230
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Ну да, arguments.callee.test = 1, это аналогично var test = 1;  
В учебнике тогда сырой пример, объясняется что если test = arguments.callee.test, а потом test++, то значение будет прибавленно именно у test, а не у arguments.callee.test. Я че и подумал, как могут быть два test. Там надо было написать как-то test_new = arguments.callee.test.
 
Если что тут, хотя как по мне вопрос исчерпан.
 функции-объекты
dmitriymar, твой минус мне в карму "учи основы", так я их и учу, и не моя вина что в учебнике опечатка. Не хочешь помогать - не надо.  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось lancer, 29.07.2013 в 01:08.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				29.07.2013, 03:30
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 11.09.2010 
					
					
					
						Сообщений: 8,804
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от lancer
			
		
	 | 
 
	| 
		В учебнике тогда сырой пример, объясняется что если test = arguments.callee.test, а потом test++, то значение будет прибавленно именно у test, а не у arguments.callee.test.
	 | 
 
	
 
 Все правильно написано в учебнике. Так и есть.
 
	
 
	| 
		
			Сообщение от lancer
			
		
	 | 
 
	| 
		Я че и подумал, как могут быть два test.
	 | 
 
	
 
 А почему нет? Ты создал локальную переменную test, у которой тут же задал начальное значение, равное значению arguments.callee.test. 
Операции над test никак не повлияют на arguments.callee.test (с чего бы это)?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				29.07.2013, 09:15
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 х.з 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 21.11.2010 
					
					
					
						Сообщений: 4,588
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от lancer
			
		
	 | 
 
	| 
		так я их и учу, и не моя вина что в учебнике опечатка
	 | 
 
	
 
 Нет там опечатки , учи основы , выучи что передаётся по ссылке , а что по значению  и  прочие основы и вопросов не будет и обвинений в "опечатках" . ты 5 лет на форуме
 
	
 
	| 
		
			Сообщение от lancer
			
		
	 | 
 
	| 
		Не хочешь помогать - не надо.
	 | 
 
	
 
   -чувак это ты не хочешь вдумываться в то что тебе говорят, и изучить основы наконец 
чего стоит "Создание примитива с таким же именем как у уже существующего свойства функции" -что такое примитив? что это за термин ?  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось dmitriymar, 29.07.2013 в 09:19.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				29.07.2013, 19:07
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 30.01.2008 
					
					
					
						Сообщений: 230
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от danik.js
			
		
	 | 
 
	
		
	
 
	| 
		
			Сообщение от lancer
			
		
	 | 
 
	| 
		В учебнике тогда сырой пример, объясняется что если test = arguments.callee.test, а потом test++, то значение будет прибавленно именно у test, а не у arguments.callee.test. Я че и подумал, как могут быть два test. Там надо было написать как-то test_new = arguments.callee.test.
	 | 
 
	
 
 Все правильно написано в учебнике. Так и есть.
	 | 
 
	
 
 Ниже  этого раздела пишется, что переменная объявленная не через var попадает в свойство объекта window, я и подумал, что те что без var внутри функции попадают в arguments.callee. Ничего и не говориться потому что про них и выше как раз пример с arguments.callee - а раз ничего не говориться, я и сделал такие выводы.
 dmitriymar, конечно спасибо за советы про что почитать, но не надо раньше времени делать выводы, учебник кривовато написан, об этом и в комментариях многие говорят. Насчет 5 лет - так 4 из них почти им не занимался.
 
Не знаю как тут поживает другой учебник, но вот тот, на который я дал ссылку даже нельзя назвать учебником - быстрая справка да и то убогая. Почему? Потому что совершенно не объясняется для чего все это служит, всего лишь говориться, есть это и это. Изредко только появляются хоть какие-то примеры на этот счет. Качайте учебник "Дэвид Флэнаган. Javascript. Подробное руководство. 6-е издание" .pdf. Сейчас почитал и понял, что это небо и земля.
 
Плохо, что понимаешь это когда уже намучаешься с недельку с сухим материалом и переспросишь по 10 раз очевидные детали.  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось lancer, 29.07.2013 в 19:47.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				29.07.2013, 20:23
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 22.03.2012 
					
					
					
						Сообщений: 3,744
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от lancer
			
		
	 | 
 
	| 
		что переменная объявленная не через var попадает в свойство объекта window, я и подумал, что те что без var внутри функции попадают в arguments.callee
	 | 
 
	
 
 ох-й вывод, самому не смешно
 
	
 
	| 
		
			Сообщение от lancer
			
		
	 | 
 
	| 
		Не знаю как тут поживает другой учебник, но вот тот, на который я дал ссылку даже нельзя назвать учебником - быстрая справка да и то убогая. Почему? Потому что совершенно не объясняется для чего все это служит, всего лишь говориться, есть это и это. Изредко только появляются хоть какие-то примеры на этот счет
	 | 
 
	
 
 нет,  lancer, учебник как раз не плохой, додумывать надо меньше подобным образом, а додуманное проверять
 
	
 
	| 
		
			Сообщение от lancer
			
		
	 | 
 
	| 
		Качайте учебник "Дэвид Флэнаган. Javascript. Подробное руководство. 6-е издание" .pdf. Сейчас почитал и понял, что это небо и земля
	 | 
 
	
 
 вот тебе ближайший учебник  http://es5.javascript.ru/, так как это исходный источник того, как должны работать основные конструкции языка (хотя лучше почитать в оригинале)  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |