Проверка в замыкании
Здравствуйте, скажите, как сделать проверку в замыкании.
Нужно чтобы при каждом вызове var generator = sequence(10,3) начальное число увеличивалось на шаг var generator = sequence(10,3) // 10 var generator = sequence(10,3) // 13 var generator = sequence(10,3) // 16 var generator = sequence(10,3) // 19 Сделал так:
function sequence(x,y) {
var result = x ;
return function () {
return result+=y;
}
}
Но проблема, первое число выходит 13, а должно 10. Как сделать проверку? Я пытался так:
function sequence(x,y) {
var result = x ;
var c = true;
if (c) {
c = !c;
return function () {
return result;
}
}
else {
return function () {
return result +=y;
}
}
}
Но это не работает, почему не понимаю |
hujak_hujak,
<script>
function sequence(x,y) {
var result;
sequence = function () {
return result += y
}
return result = x;
}
for (var i=0; i<4; i++) {document.write(sequence(10,3) + '<br>')}
</script>
|
А generator то при вызове не обновляется
|
Цитата:
|
Ну, задание что бы я вызывал generator() - вот так, а он мне выдавал постоянно разные числа.
generator() // 10 generator() // 13 generator() // 16 generator() // 19 |
Криво наверное написал 1е сообщение
Задача: реализовать функцию sequence, которая будет увеличивать число 10 на шаг 3. var generator = sequence(10,3) Т.е : generator () // 10 generator () // 13 generator () // 16 generator () // 19 Мое решение :
var generator = sequence(10,3)
function sequence(x,y) {
var result = x ;
return function () {
return result+=y;
}
}
Но тут начинается не с 10, а с 13. А мне нужно чтобы первый вызов ровнялся 10, а я не могу этого сделать |
Так попробуйте
var c =result;result+=y;return c |
Ничего не выходит, самое обидное, что в пятницу я решил эту задачку, а сегодня хоть убей, не могу, 3 часа уже мучаюсь)
|
hujak_hujak,
<script>
function sequence(x,y) {
var result;
return function () {
return result ? result += y : result = x
}
}
var generator = sequence(10,3);
for (var i=0; i<4; i++) {document.write(generator()+ '<br>') }
</script>
|
<script>
function* sequence(a, b) {
while (true) {
yield(a);
a += b;
}
}
var generator = sequence(10, 3);
document.write(generator.next().value + '<br>');
document.write(generator.next().value + '<br>');
document.write(generator.next().value + '<br>');
</script>
демонстрация :) |
hujak_hujak, шаг назад при инициализации генератора делаешь да и всё:
function sequence(x, y) {
var result = x - y, step = y;
return function () {
return result += step;
}
}
var generator = sequence(10,3);
alert([generator(), generator(), generator(), generator(), generator()]);
|
Rise,
интересное решение, но зачем дополнительные переменные?
function sequence(x, y) {
x -= y;
return function () {
return x += y;
}
}
var generator = sequence(10,3);
alert([generator(), generator(), generator(), generator(), generator()]);
|
| Часовой пояс GMT +3, время: 18:08. |