Zmiana kodu biorąc pod uwagę zastosowanie domknięć.

0

Witajcie,

Prosty kod licznika


function makeCounter() {
    var count = 0;

   function counter () {
   count = count + 1;
   return count;
  }
  return counter;

}

należy teraz zmodyfikować. Funkcja makeCounter nie pobiera żadnych argumentów, lecz definiuje zmienną count. Następnie tworzy i zwraca obiekt udostępniający jedną metodę. increment. Ta metoda inkrementuje wartość zmiennej count, a następnie ją zwraca.

Nie wiem jak się do tego zabrać. Jak wykonać to polecenie? Temat dotyczy domykania.

0

Nie weim jakie Chcesz zachowanie funkcji, ale w pseudokodzie (Python), można zrobić tak:

def makeCounter():
	count = [0]
	def increment(n):
		count[0] += n
		return count[0]
	return increment

def makeCounter1():
	count = 0
	def increment(n):
		return count + 1
	return increment

counter = makeCounter()

counter(1)

Pierwsza wersja "pamięta" swoje wywołania(closure) - zwraca ich liczbę, ale nie ma znaczenia od czego się ją wywoła. Druga wersja tylko inkrementuje argument i też go zwraca.

0

Nie umiem JS:

function makeCounter() {
    let count = 0
    return { increment: () => ++count }
}

const counter = makeCounter()
console.log(counter.increment())
console.log(counter.increment())
console.log(counter.increment())

W Pythonie:

>>> def make_counter():
...     count = 0
...     class Counter:
...         def increment(self):
...             nonlocal count
...             count += 1
...             return count
...     return Counter()
... 
>>> counter = make_counter()
>>> counter.increment()
1
>>> counter.increment()
2
>>> counter.increment()
3
>>> 
0
function makeCounter() {
  let value = 0;
  
  return {
    increment: () => {
      return ++value;
    },
    getValue: () => {
      return value;
    }
  }
}

const counter = makeCounter();

console.log(counter.getValue());
console.log(counter.increment());
console.log(counter.increment());
console.log(counter.increment());

Zwracamy obiekt który posiada dwie metody "getValue()" oraz "increment", zmieniają one wartość w ramach domknięcia funkcji "makeCounter".

0

Okazuje się, że odpowiedź wyglądała tak:


function makeCounter() {
var count = 0;
return  {
   increment: function () {
       count++;
       return count:

Czy tutaj ta zmienna var count=0 jest nazwana niezależną dlatego, że jest poza funkcją function()?

1 użytkowników online, w tym zalogowanych: 0, gości: 1