Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.07.2016, 10:44
Интересующийся
Отправить личное сообщение для hujak_hujak Посмотреть профиль Найти все сообщения от hujak_hujak
 
Регистрация: 05.07.2016
Сообщений: 15

Проверка в замыкании
Здравствуйте, скажите, как сделать проверку в замыкании.
Нужно чтобы при каждом вызове 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;
        }
    }

}

Но это не работает, почему не понимаю
Ответить с цитированием
  #2 (permalink)  
Старый 25.07.2016, 10:56
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

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>
Ответить с цитированием
  #3 (permalink)  
Старый 25.07.2016, 11:03
Интересующийся
Отправить личное сообщение для hujak_hujak Посмотреть профиль Найти все сообщения от hujak_hujak
 
Регистрация: 05.07.2016
Сообщений: 15

А generator то при вызове не обновляется
Ответить с цитированием
  #4 (permalink)  
Старый 25.07.2016, 11:08
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от hujak_hujak
А generator то при вызове не обновляется
не понимаю
Ответить с цитированием
  #5 (permalink)  
Старый 25.07.2016, 11:12
Интересующийся
Отправить личное сообщение для hujak_hujak Посмотреть профиль Найти все сообщения от hujak_hujak
 
Регистрация: 05.07.2016
Сообщений: 15

Ну, задание что бы я вызывал generator() - вот так, а он мне выдавал постоянно разные числа.

generator() // 10

generator() // 13

generator() // 16

generator() // 19
Ответить с цитированием
  #6 (permalink)  
Старый 25.07.2016, 11:16
Интересующийся
Отправить личное сообщение для hujak_hujak Посмотреть профиль Найти все сообщения от hujak_hujak
 
Регистрация: 05.07.2016
Сообщений: 15

Криво наверное написал 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, а я не могу этого сделать
Ответить с цитированием
  #7 (permalink)  
Старый 25.07.2016, 11:43
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Так попробуйте
var c =result;result+=y;return c
Ответить с цитированием
  #8 (permalink)  
Старый 25.07.2016, 11:58
Интересующийся
Отправить личное сообщение для hujak_hujak Посмотреть профиль Найти все сообщения от hujak_hujak
 
Регистрация: 05.07.2016
Сообщений: 15

Ничего не выходит, самое обидное, что в пятницу я решил эту задачку, а сегодня хоть убей, не могу, 3 часа уже мучаюсь)
Ответить с цитированием
  #9 (permalink)  
Старый 25.07.2016, 11:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

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>
Ответить с цитированием
  #10 (permalink)  
Старый 25.07.2016, 23:36
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

<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>

демонстрация
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка на существование элемента в реальном времени js dkmrus Общие вопросы Javascript 7 03.05.2016 22:12
проверка формы не работает в ie begelme Javascript под браузер 6 13.08.2013 01:00
Проверка встроенной поддержки типа с помощью библиотеки Modernizr viy.li Библиотеки/Тулкиты/Фреймворки 3 15.06.2013 15:48
Проверка данных формы составным условием? myafa Элементы интерфейса 8 01.04.2011 08:30
Проверка полей отправляемой формы. denisOgr jQuery 6 18.10.2010 19:40