Undefined als result van functie

Status
Niet open voor verdere reacties.

luc99

Gebruiker
Lid geworden
10 nov 2015
Berichten
98
Waarom krijg ik een undefined als antwoord bij alert van test ?

Code:
var text = "dit is een test";
var d = 20;
var test = Reduce ( text, d );

alert ( test );

function Reduce(beschrijving, dagen) {
    var l = beschrijving.length;
    var resultaat = beschrijving;
       
    canvas = document.createElement("canvas");
    context = canvas.getContext("2d");
    context.font = "Arial, Helvetica, sans-serif";
    width = context.measureText(beschrijving).width;
    formattedWidth = Math.ceil(width);
     
    if ( formattedWidth > dagen ) {
      
      l--;
      var beschrijving = beschrijving.substr(0, l);
            
      Reduce(beschrijving,dagen)
    } else {
           
      return beschrijving;  
    }
    
  }
 
Recursie in JavaScript (1)

Als je met een globale variabele werkt dan gaat het goed.
Of de uitkomst is zoals je wilt kan je zelf verder controleren.

Code:
// 'global' beschrijving ook in function gebruiken
var beschrijving = "dit is een test";

let aantalDagen = 20;
Reduce (aantalDagen);

alert (beschrijving);

function Reduce (dagen) {

    let l = beschrijving.length;
    let canvas = document.createElement("canvas");
    let context = canvas.getContext("2d");
    context.font = "Arial, Helvetica, sans-serif";
    let width = context.measureText(beschrijving).width;
    let formattedWidth = Math.ceil(width);

    if ( formattedWidth > dagen ) {
        l--;
        beschrijving = beschrijving.substr(0, l);
        console.log ( 'if: ' + beschrijving );
        Reduce (dagen);
    }
}
 
Laatst bewerkt:
Recursie in JavaScript (2)

Nog even terugkomend op je bericht #1
Als je de function bovenaan zet en de if...else... iets wijzigt dan werkt het ;)

Code:
function Reduce (beschrijving, dagen) {

    let l = beschrijving.length;
    let canvas = document.createElement("canvas");
    let context = canvas.getContext("2d");
    context.font = "Arial, Helvetica, sans-serif";
    let width = context.measureText(beschrijving).width;
    let formattedWidth = Math.ceil(width);

    if ( formattedWidth > dagen ) {
        l--;
        beschrijving = beschrijving.substr(0, l);
        return Reduce (beschrijving, dagen);
    } else {
        return beschrijving;
    }
}

let text = "dit is een test";
let d = 20;
let test = Reduce ( text, d );

alert ( test );
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan