Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   нужна задача, чтобы попрактиковаться)) (https://javascript.ru/forum/misc/20819-nuzhna-zadacha-chtoby-popraktikovatsya.html)

systemiv 20.08.2011 04:08

Цитата:

Сообщение от melky (Сообщение 121413)
простая и быстрая задачка

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

var a = myFunc(); // вернет "hello"
var b = myFunc(); // вернет "wtf"

Можете кинуть решение в ЛС? Если не сильно затруднит.

monolithed 20.08.2011 15:06

Цитата:

Сообщение от systemiv
Можете кинуть решение

function foo() {
    var i = 0;
    foo = function() {
        return ['Hello', 'World'][i++];
    }
    return foo();
}
     
alert([foo(), foo()].join(' '));

systemiv 20.08.2011 15:08

Цитата:

Сообщение от monolithed (Сообщение 121487)
function foo() {
    var i = 0;
    foo = function() {
        return ['Hello', 'World'][i++];
    }
    return foo()
}
     
alert([foo(), foo()].join(' '));

Всё гораздо проще

monolithed 20.08.2011 15:12

Цитата:

Сообщение от systemiv
Всё гораздо проще

Но не так динамично ;)

systemiv 20.08.2011 15:25

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

По моему очень просто, не каждый новичёк, глядя на этот код поймёт, почему он вообще так работает)

Magneto 20.08.2011 15:35

Цитата:

Сообщение от monolithed
Но не так динамично

А какая динамика появляется в Вашем примере?

Я к примеру тоже решил этот пример как советует Стоян Стефанов в своей книге «JavaScript шаблоны»
var myFunc = function () {
  myFunc = function () {
    return "wtf";
  };
  return "hello";
};

Octane 20.08.2011 15:44

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

alert([myFunc(), myFunc()])

monolithed 20.08.2011 15:45

Цитата:

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

function foo() {
    var i = 0;
    foo = function() {
        return ['a', 'b', 'c', 'd'][i++];
    }
    return foo();
}
     
alert([
     foo(),
     foo(),
     foo(),
     foo()
]);

Цитата:

Сообщение от Magneto
Я к примеру тоже решил этот пример как советует Стоян Стефанов в своей книге «JavaScript шаблоны»

Стоян Стефанов много хороих идей саккумулировал в своей книгие, но нужно еще немого своей головой думать.

systemiv 20.08.2011 15:57

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

Вообще без зацикливания

Sweet 20.08.2011 15:57

Лично я бы сделал примерно так:
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( " " ) );
Динамики хоть отбавляй:D


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