Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 20.08.2011, 04:08
Аватар для systemiv
Профессор
Отправить личное сообщение для systemiv Посмотреть профиль Найти все сообщения от systemiv
 
Регистрация: 19.08.2011
Сообщений: 186

Сообщение от melky Посмотреть сообщение
простая и быстрая задачка

вместо условия пишу код с комментами. и да, функция одна

var a = myFunc(); // вернет "hello"
var b = myFunc(); // вернет "wtf"
Можете кинуть решение в ЛС? Если не сильно затруднит.
Ответить с цитированием
  #12 (permalink)  
Старый 20.08.2011, 15:06
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от systemiv
Можете кинуть решение
function foo() {
    var i = 0;
    foo = function() {
        return ['Hello', 'World'][i++];
    }
    return foo();
}
     
alert([foo(), foo()].join(' '));

Последний раз редактировалось monolithed, 20.08.2011 в 15:16.
Ответить с цитированием
  #13 (permalink)  
Старый 20.08.2011, 15:08
Аватар для systemiv
Профессор
Отправить личное сообщение для systemiv Посмотреть профиль Найти все сообщения от systemiv
 
Регистрация: 19.08.2011
Сообщений: 186

Сообщение от monolithed Посмотреть сообщение
function foo() {
    var i = 0;
    foo = function() {
        return ['Hello', 'World'][i++];
    }
    return foo()
}
     
alert([foo(), foo()].join(' '));
Всё гораздо проще

Последний раз редактировалось monolithed, 20.08.2011 в 15:13.
Ответить с цитированием
  #14 (permalink)  
Старый 20.08.2011, 15:12
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от systemiv
Всё гораздо проще
Но не так динамично
Ответить с цитированием
  #15 (permalink)  
Старый 20.08.2011, 15:25
Аватар для systemiv
Профессор
Отправить личное сообщение для systemiv Посмотреть профиль Найти все сообщения от systemiv
 
Регистрация: 19.08.2011
Сообщений: 186

Вот решение который мне отправил melky:
myFunc = function(){
    myFunc = function(){
        return "wtf";
    } 
    return "hello";
}
 
alert(myFunc()); 
alert(myFunc());

По моему очень просто, не каждый новичёк, глядя на этот код поймёт, почему он вообще так работает)
Ответить с цитированием
  #16 (permalink)  
Старый 20.08.2011, 15:35
Аватар для Magneto
Люмус, Емаксос Developer!
Отправить личное сообщение для Magneto Посмотреть профиль Найти все сообщения от Magneto
 
Регистрация: 06.05.2010
Сообщений: 677

Сообщение от monolithed
Но не так динамично
А какая динамика появляется в Вашем примере?

Я к примеру тоже решил этот пример как советует Стоян Стефанов в своей книге «JavaScript шаблоны»
var myFunc = function () {
  myFunc = function () {
    return "wtf";
  };
  return "hello";
};
Ответить с цитированием
  #17 (permalink)  
Старый 20.08.2011, 15:44
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Можно и не переопределять функцию:
function myFunc() {
    return ["wtf", "hello"][myFunc.i ^= 1];
}

alert([myFunc(), myFunc()])
Ответить с цитированием
  #18 (permalink)  
Старый 20.08.2011, 15:45
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от Magneto
А какая динамика появляется в Вашем примере?
function foo() {
    var i = 0;
    foo = function() {
        return ['a', 'b', 'c', 'd'][i++];
    }
    return foo();
}
     
alert([
     foo(),
     foo(),
     foo(),
     foo()
]);

Сообщение от Magneto
Я к примеру тоже решил этот пример как советует Стоян Стефанов в своей книге «JavaScript шаблоны»
Стоян Стефанов много хороих идей саккумулировал в своей книгие, но нужно еще немого своей головой думать.
Ответить с цитированием
  #19 (permalink)  
Старый 20.08.2011, 15:57
Аватар для systemiv
Профессор
Отправить личное сообщение для systemiv Посмотреть профиль Найти все сообщения от systemiv
 
Регистрация: 19.08.2011
Сообщений: 186

Тогда можно даже так:
var data = [22,33,44,88,99];
		function test(){
			alert(data[0]);
			data.shift();
		}
		test();
		test();
		test();
		test();

Вообще без зацикливания
Ответить с цитированием
  #20 (permalink)  
Старый 20.08.2011, 15:57
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Лично я бы сделал примерно так:
function foo(){
  if( !foo.values ) foo.values = [];
  if( arguments.length === 0 )
    return foo.values.shift();
  foo.values.push.apply( foo.values, arguments );
  return foo;
};

foo( "Hello", "wtf" );

alert( [ foo(), foo() ].join( " " ) );
Динамики хоть отбавляй
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать, чтобы у toggle была ненулевая высота? student-k Общие вопросы Javascript 7 15.08.2011 23:46
HTML5 Как сделать, чтобы можно было двигать картинку мышью? Бобр Общие вопросы Javascript 2 18.06.2010 21:22
Нужна помощь для реализации функции d'n'd vaal Элементы интерфейса 4 09.06.2010 17:27
Создание вкладок, нужна помощь... CaHuTaP Общие вопросы Javascript 3 12.02.2009 18:41
НУжна помощ ! Jumong Общие вопросы Javascript 4 01.10.2008 23:17