Проверка в замыкании
Здравствуйте, скажите, как сделать проверку в замыкании.
Нужно чтобы при каждом вызове 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> демонстрация :) |
Часовой пояс GMT +3, время: 22:58. |