Показать сообщение отдельно
  #6 (permalink)  
Старый 23.11.2017, 12:20
Интересующийся
Отправить личное сообщение для jerseybb Посмотреть профиль Найти все сообщения от jerseybb
 
Регистрация: 17.11.2017
Сообщений: 10

ami_moor, Ваша ключевая ошибка в том, что результат возвращаемой функции зависит от переменных, которые хранятся в замыкании и которые Вы изменяете:

1. В возвращаемой функции Вы вызываете func с массивом аргументов masArg, который изменили до этого. Чего делать нельзя, так как при последующем вызове функции массив masArg сохранится в замыкании. Перед изменением masArg сделайте копию массива и работайте с ней. К примеру:
let args = masArg.slice()

2. Во вторых, у Вас в замыкании хранится count и в возвращаемой функции эта переменная никак не обновляется. Значит при повторном вызове она будет иметь значение на конец предыдущего вызова функции.

Для исправления Вашего кода вынесите объявление masArg2 и count в начало возвращаемой функции. И перед проверкой на undefined сделайте копию masArg и вносите аргументы уже в копию, аргументы из которой потом передадите в func.

Ну и конечно, как уже сказал рони, результат второго вызова должен быть не 'a=1, b=2, c=3', а 'a=1, b=1, c=3'.
Ответить с цитированием