Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Работа замыкания (https://javascript.ru/forum/events/61649-rabota-zamykaniya.html)

Moloch 28.02.2016 15:20

Работа замыкания
 
Здравствуйте, подскажите пожалуйста как решить такую задачу?
function add(x) {
  var part = function(y) {
    part.sum += y;
    return part;
  };

  part.sum = x;
  part.valueOf = function() {
    return part.sum;
  };

  return part;
}

var x = add(1)(2)(3)(4);
console.log(+x);
// 10
var three = add(1)(2);
console.log(+three);
//3
var six = three(3);
console.log(+six);
//6

console.log(+three);
//6


как сделать так, чтобы console.log(+three) на последнем шаге было 3?

destus 28.02.2016 16:53

Moloch,
А почему должно быть 3, если six и three ссылаются на одну и туже функцию и вызов одной из них, изменяет свойство sum обеих? Объект переменных надо новый создавать.
<script>
        function add(x) {
            var part = function (y) {
                part.sum += y;
                return part;
            };

            part.sum = x;
            part.valueOf = function () {
                return part.sum;
            };

            return part;
        }


        var three = add(1)(2);
        var six = add(+three)(3)
        alert(+three);
    </script>

Moloch 28.02.2016 17:01

благодарю за ответ!


Часовой пояс GMT +3, время: 08:25.