20.08.2011, 04:08
|
|
Профессор
|
|
Регистрация: 19.08.2011
Сообщений: 186
|
|
Сообщение от melky
|
простая и быстрая задачка
вместо условия пишу код с комментами. и да, функция одна
var a = myFunc(); // вернет "hello"
var b = myFunc(); // вернет "wtf"
|
Можете кинуть решение в ЛС? Если не сильно затруднит.
|
|
20.08.2011, 15:06
|
Особый гость
|
|
Регистрация: 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.
|
|
20.08.2011, 15:08
|
|
Профессор
|
|
Регистрация: 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.
|
|
20.08.2011, 15:12
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
Сообщение от systemiv
|
Всё гораздо проще
|
Но не так динамично
|
|
20.08.2011, 15:25
|
|
Профессор
|
|
Регистрация: 19.08.2011
Сообщений: 186
|
|
Вот решение который мне отправил melky:
myFunc = function(){
myFunc = function(){
return "wtf";
}
return "hello";
}
alert(myFunc());
alert(myFunc());
По моему очень просто, не каждый новичёк, глядя на этот код поймёт, почему он вообще так работает)
|
|
20.08.2011, 15:35
|
|
Люмус, Емаксос Developer!
|
|
Регистрация: 06.05.2010
Сообщений: 677
|
|
Сообщение от monolithed
|
Но не так динамично
|
А какая динамика появляется в Вашем примере?
Я к примеру тоже решил этот пример как советует Стоян Стефанов в своей книге «JavaScript шаблоны»
var myFunc = function () {
myFunc = function () {
return "wtf";
};
return "hello";
};
|
|
20.08.2011, 15:44
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Можно и не переопределять функцию:
function myFunc() {
return ["wtf", "hello"][myFunc.i ^= 1];
}
alert([myFunc(), myFunc()])
|
|
20.08.2011, 15:45
|
Особый гость
|
|
Регистрация: 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 шаблоны»
|
Стоян Стефанов много хороих идей саккумулировал в своей книгие, но нужно еще немого своей головой думать.
|
|
20.08.2011, 15:57
|
|
Профессор
|
|
Регистрация: 19.08.2011
Сообщений: 186
|
|
Тогда можно даже так:
var data = [22,33,44,88,99];
function test(){
alert(data[0]);
data.shift();
}
test();
test();
test();
test();
Вообще без зацикливания
|
|
20.08.2011, 15:57
|
Профессор
|
|
Регистрация: 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( " " ) );
Динамики хоть отбавляй
|
|
|
|