| 
	| 
	
	| 
		
	| 
			
			 
			
				08.01.2012, 12:34
			
			
			
		 |  
	| 
		
			
			| Аспирант       |  | 
					Регистрация: 10.04.2010 
						Сообщений: 92
					 
		
 |  |  
	| 
				Таймеры: "setTimeout" и "setInterval"
			 Вопрос по уроку "Таймеры: "setTimeout" и "setInterval". 
Вот здесь  автор пишет, что "по умолчанию, setTimeout не передаёт функции никаких аргументов ". И приводит пример:
 
function sayHi(who) {
  alert("Привет, я " + who);
}
setTimeout(sayHi, 1000);  // Привет, я undefined
Все вроде правильно, не передает. Потому что ничего и не передавалось.
 
Потом он пишет такое: "Для того, чтобы аргументы передать, обёртывают вызов в анонимную функцию: "
 
function sayHi(who) {
  alert("Привет, я " + who);
}
 
setTimeout(function() { sayHi('Вася') }, 1000);  // Привет, я Вася
Да, так передает. Но он прекрасно передает и так:
 
function sayHi(who) {
  alert("Привет, я " + who);
}
 
setTimeout(sayHi("Вася"), 1000);   // Привет, я Вася
То есть очевидно, что по умолчанию setTimeout преспокойно может передавать функции аргументы.
 
Вопрос. Зачем автор пишет, что setTimeout  не может? Или здесь есть какие особенные различия между 2м и 3м примером?			 Последний раз редактировалось jsuse, 08.01.2012 в 13:16.
 |  |  
	| 
		
	| 
			
			 
			
				08.01.2012, 12:42
			
			
			
		 |  
	| 
		
			
			| Интересующийся       |  | 
					Регистрация: 06.01.2012 
						Сообщений: 25
					 
		
 |  |  
	| В последнем варианте скобочка потеряна? 
setTimeout(sayHi("Вася"), 1000);   // Привет, я Вася
В данном случает setTimeout не срабатывает, т.е. эта строка идентична: 
sayHi("Вася");
 |  |  
	| 
		
	| 
			
			 
			
				08.01.2012, 13:21
			
			
			
		 |  
	| 
		
			
			| Аспирант       |  | 
					Регистрация: 10.04.2010 
						Сообщений: 92
					 
		
 |  |  
	| 
	
 
	| Сообщение от Saqsess   |  
	| В последнем варианте скобочка потеряна? 
 
setTimeout(sayHi("Вася"), 1000);   // Привет, я Вася
В данном случает setTimeout не срабатывает, т.е. эта строка идентична:
 
sayHi("Вася");
 |  
	
 Уже исправил. |  |  
	| 
		
	| 
			
			 
			
				08.01.2012, 13:21
			
			
			
		 |  
	| 
		
			
			| Аспирант       |  | 
					Регистрация: 10.04.2010 
						Сообщений: 92
					 
		
 |  |  
	| Все, разобрался. В 3м примере он просто вызывает функцию. Он не делает задержку. Оборачивать в функцию нужно, чтоб срабатывала задержка. |  |  
	| 
		
	| 
			
			 
			
				08.01.2012, 16:50
			
			
			
		 |  
	| 
		
			
			| Профессор     |  | 
					Регистрация: 25.12.2011 
						Сообщений: 786
					 
		
 |  |  
	| [quote=jsuse]Да, так передает. Но он прекрасно передает и так: 
function sayHi(who) {
  alert("Привет, я " + who);
}
setTimeout(sayHi("Вася"), 1000);   // Привет, я Вася
разжую:
 
дело в том что 'Вася' передает не функция setTimeout , а человек написавший скрипт. 
setTimeout, например, мог бы передавать свой айдишник, или время вызова и время старта, то есть если написать в нем
 
setTimeout(   function(a){}   ,2000), то в a  он мог бы что-то засовывать. какую то служебную информацию. но он этого не делает. 
То есть вызывая функцию, он бы передавал в неё что-то. Какую-то свою инфу. Но он этого не делает.			 Последний раз редактировалось Livaanderiamarum, 08.01.2012 в 16:53.
 |  |  
	| 
		
	| 
			
			 
			
				08.01.2012, 16:56
			
			
			
		 |  
	| 
		
			
			| Профессор     |  | 
					Регистрация: 25.12.2011 
						Сообщений: 786
					 
		
 |  |  
	| 
	
 
	| Сообщение от jsuse   |  
	| Все, разобрался. В 3м примере он просто вызывает функцию. Он не делает задержку. Оборачивать в функцию нужно, чтоб срабатывала задержка. |  
	
 че за хуйню ты несешь)? 
он принимает функцию))
 
var q = function(){}
q()   - ЭТО ВЫЗОВ ФУНКЦИИ то есть там лежит не функция а результат её работы. то что после return в ней
q    - А ЭТО это САМА функция.
 
ИНЫМИ СЛОВАМИ КРУГЛЕНЬКИЕ СКОБОЧКИ () ЭТО ОПЕРАТОР КОТОРЫЙ ВЫПОЛНЯЕТ ФУНКЦИЮ КОТОРАЯ СЛЕВА ОТ НЕГО
 
setTimeout  принимает функцию и число. 
setTimeout(q, 200) // понятно? нахуя нам передавать РЕЗУЛЬТАТ РАБОТЫ  функции ВЫПОЛНЯЯ ЕЁ ПИША ПОСЛЕ НЕЁ СКОБОЧКИ ВЫЗОВА))??? Нужно передавать просто функцию, ПЕРЕМЕННУЮ В КОТОРОЙ ОНА ЛЕЖИТ. 
а setTimeout сам скобочками её вызовет по истечении таймера.
 
 а если передавать анонимную функцию, мы же её не вызываем передавая))? 
а мы могли бы это сделать так ( function(){})()  взяв её в скобки группровки и применить к ним оператор вызова.  
но мы передает не РЕЗУЛЬТАТ РАБОТЫ а чисто текст функции)) которую он вызывет скобочками сам потом когда таймер пройдет, а до тех пор будет хранить у ся в памяти
 
setTimeout(    function(){}  , 200)			 Последний раз редактировалось Livaanderiamarum, 08.01.2012 в 17:04.
 |  |  
	| 
		
	| 
			
			 
			
				09.01.2012, 17:57
			
			
			
		 |  
	| 
		
			
			| Интересующийся       |  | 
					Регистрация: 28.10.2010 
						Сообщений: 14
					 
		
 |  |  
	| Ну все правильно человек написал, что если написать, так как он написал в последнем примере, то функция вызовется сразу, а не сработает таймер. 
В setTimeout передается ссылка на функцию, которую надо выполнить по истечение таймера. То есть либо можно послать имя функции, либо через переменную, либо создав анонимную функцию, в которой уже будет твоя функция с параметром.
 
var q = function(){}; // причем можно и на уже существующую функцию сделать ссылку
setTimeout( myFunc, 1000 );
setTimeout( q, 1000 );
setTimeout( function(){ myFunc('vasya'); }, 1000 ); // через анонимную функцию, здесь происходит объявление функции, без выполнения.
Причем в setTimeout ещё же первым параметром можно строчку передать, тогда можно и параметры передавать:
 
setTimeout( "myFunc('vasya')", 1000 );
В последнем не уверен на 100%, но по-моему правда. |  |  
	| 
		
	| 
			
			 
			
				09.01.2012, 18:15
			
			
			
		 |  
	| 
		
			
			| Интересующийся       |  | 
					Регистрация: 06.01.2012 
						Сообщений: 25
					 
		
 |  |  
	| Последний пример не сработает.   |  |  
	| 
		
	| 
			
			 
			
				09.01.2012, 18:40
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 27.05.2010 
						Сообщений: 33,150
					 
		
 |  |  
	| 
	
 
	| Сообщение от Saqsess |  
	| Последний пример не сработает. |  
	
   
function myFunc(name)
{
  alert(name);
}
setTimeout( "myFunc('vasya')", 1000 );
 |  |  
	| 
		
	| 
			
			 
			
				09.01.2012, 19:03
			
			
			
		 |  
	| 
		
			
			| Интересующийся       |  | 
					Регистрация: 06.01.2012 
						Сообщений: 25
					 
		
 |  |  
	| Черт. В свою защиту скажу, что проверял на jsfiddle.net - там не срабатывает, а в консоли chrome все отлично работает. Был не прав. |  |  |  |