[ Web Proxy ]
URL:
Viewing: https://da.javascript.info/task/sum-many-brackets [Back]  [Original]

Tl sammen med et vilkrligt antal parenteser
DA

Vi nsker at gre dette open source-projekt tilgngeligt for folk over hele verden.

Hjlp med at overstte indholdet af denne tutorial til dit sprog!

    Sg p Javascript.info:
    Sg i tutorialen:
    Lyst temaMrkt tema
    DanskEnglishEspaolFranaisIndonesiaItalianoTrkeOzbek
    tilbage til lektionen

    Tl sammen med et vilkrligt antal parenteser

    vigtighed: 2

    Skriv funktionen sum som virker som dette:

    sum(1)(2) == 3; // 1 + 2
    sum(1)(2)(3) == 6; // 1 + 2 + 3
    sum(5)(-1)(2) == 6
    sum(6)(-1)(-2)(-3) == 0
    sum(0)(1)(2)(3)(4)(5) == 15

    Hint: du vil vre ndt til at oprette en brugerdefineret objekt til primitiv konvertering for for at de virker.

    bn en sandbox med tests.

    lsning
    1. For at det overhovedet komme til at virke, skal resultatet af sum vre en funktion.
    2. Den funktion skal gemme den nuvrende vrdi mellem kald.
    3. Iflge opgaven skal funktionen blive til et tal nr den bruges i ==. Funktioner er objekter, s konverteringen sker som beskrevet i kapitlet Konvertering fra objekt til primitiv, og vi kan give en egen metode der returnerer tallet.

    Her er koden:

    function sum(a) {
    
      let currentSum = a;
    
      function f(b) {
        currentSum += b;
        return f;
      }
    
      f.toString = function() {
        return currentSum;
      };
    
      return f;
    }
    
    alert( sum(1)(2) ); // 3
    alert( sum(5)(-1)(2) ); // 6
    alert( sum(6)(-1)(-2)(-3) ); // 0
    alert( sum(0)(1)(2)(3)(4)(5) ); // 15

    Bemrk at funktionen sum virker kun n gang. Den returnerer funktionen f.

    Herefter, p hvert efterflgende kald, tilfjer f sin parameter til summen currentSum, og returnerer sig selv.

    Der er ingen rekursion i den sidste linje af f.

    Her er hvad rekursion ser ud som:

    function f(b) {
      currentSum += b;
      return f(); // <-- rekursivt kald
    }

    Og i vores tilflde returnerer vi bare funktionen, uden at kalde den:

    function f(b) {
      currentSum += b;
      return f; // <-- den kalder ikke sig selv. Den returnerer sig selv
    }

    Denne f vil blive brugt i det nste kald og igen returnere sig selv, s mange gange som ndvendigt. Herefter, nr den bruges som et tal eller en streng returnerer toString currentSum. Vi kunne ogs bruge Symbol.toPrimitive eller valueOf her til konverteringen.

    bn lsningen med tests i en sandbox.


    Web Proxy Viewer  |  New URL  |  Original Page