• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Bedingung funktioniert in Funktion nicht

hallo,

ich habe eine if-Bedingung, die, wenn ich sie in eine Funktion auslagere, nicht mehr funktioniert.
woran kann sowas prinzipiell liegen? ich meine ich habe alle benötigten variablen übergeben oder sonst irgendwie festgelegt!
wenn jemandem der code hilft:
diese version geht nicht:
Code:
function a_stern(){
    tempPunkt = closedList[a];    
    tempPunkt.x = tempPunkt.x + abstandPP;
    neuerPunktInOpenList(tempPunkt,a);
}
function neuerPunktInOpenList(tempPunkt,a) {
    window.openList;
    window.closedList;
    window.abstandPP;


        alert("hallo1");


    if(!(tempPunkt in closedList) && !(tempPunkt in openList)){
            alert("hallo2");
                        ..../* ausgeklammertes zeug*/            

    }
}
a_stern();
hallo1 wird ausgegeben (also wird die Funktion schon einmal bis zur Bedingung ausgeführt); hallo2 aber nicht...
dieser code funktioniert hingegen:
da ist an sich nichts anders, nur dass die Bedingung nicht mit einer Funktion aufgerufen wird!
Code:
function a_stern(){
    tempPunkt = closedList[a];
    tempPunkt.x = tempPunkt.x + abstandPP;
    if(!(tempPunkt in closedList) && !(tempPunkt in openList)){
            alert("hallo2");        
    }
}
a_stern();
hallo2 wird ausgegeben
wäre toll wenn jemand eine idee hat woran das liegt!

viele Grüße
 
Werbung:
Ein Tipp ist immer, ein funktionsfähiges (= testbares) Beispiel zu posten.

HTML:
<script>
    /*<![CDATA[*/

    var closedList = [{x: 100}],
        a = 0,
        openList = [],
        abstandPP = 12;


    function a_stern(){
        tempPunkt = closedList[a];
        tempPunkt.x = tempPunkt.x + abstandPP;
        neuerPunktInOpenList(tempPunkt,a);
    }
    function neuerPunktInOpenList(tempPunkt,a) {
        alert("hallo1");

        if(!(tempPunkt in closedList) && !(tempPunkt in openList)){
            alert("hallo2");
        }
    }

    a_stern();

    /*]]>*/
</script>
 
Werbung:
danke für die antworten :) closedList ist fest definiert was jetzt ersichtlich ist
hier ein vollständiger code(funktionieren tut er ja leider noch nicht):
Code:
<script type="text/javascript">
function a_stern() {
//VARIABLEN
//-Positionen
    var start = {x: 10, y: 10};    
    var ziel = {x: 150, y: 200};


    var tempPunkt;
    var abstandPP = 10;
//-Lists
    var openList = new Array();


    var closedList = new Array(); 
    closedList.push({
                     x: start.x, 
                     y: start.y, 
                     h: wegFluglinie(start,ziel), //h-geschätzter Weg zum Ziel, g-bisheriger weg zum Punkt
                     g: 0,
                     vorg: 0
                     }); 
//-Zählen
    var a=0;


//Anfang
for (a=0; a<=closedList.length; a++){
    
    tempPunkt = closedList[a];
    tempPunkt.x = tempPunkt.x + abstandPP;
    neuerPunktInOpenList(tempPunkt,a);


    tempPunkt = closedList[a];
    tempPunkt.x = tempPunkt.x - abstandPP;
    neuerPunktInOpenList(tempPunkt,a);


    tempPunkt = closedList[a];
    tempPunkt.y = tempPunkt.y + abstandPP;
    neuerPunktInOpenList(tempPunkt,a);


    tempPunkt = closedList[a];
    tempPunkt.y = tempPunkt.y - abstandPP;
    neuerPunktInOpenList(tempPunkt,a);    
}
    
}


function neuerPunktInOpenList(tempPunkt,a) {
    window.openList;
    window.closedList;
    window.ziel;
    window.abstandPP;
    
    if(!(tempPunkt in closedList) && !(tempPunkt in openList)){
            openList.push({
                               x: tempPunkt.x, //x-Koordinate
                             y: tempPunkt.y, //y-Koordinate
                             h: wegFluglinie(tempPunkt,ziel), //kürzester weg zum ziel von diesem punkt
                             g: closedList[a].g + abstandPP,  //weg zu diesem punkt
                             vorg: closedList[a] //Punkt von dem aus man auf aktuellen punkt gekommen ist
                             });
            punkt(tempPunkt.x,tempPunkt.y,0,255,0,5);
            alert("hallo2");        
    }
}


function wegFluglinie(p1,p2) {
    var strecke = Math.pow((Math.pow(p2.x-p1.x,2)+Math.pow(p2.y-p1.y,2)), 0.5);
    return strecke;
}


function punkt(xp,yp,r,g,b,lang){
    context.fillStyle = "rgb("+r+","+g+","+b+")";
    context.beginPath();
    context.rect(xp,yp,lang,lang);
    context.closePath();
    context.fill();
}
    var canvas = document.createElement( 'canvas' );
    canvas.width = 400;
    canvas.height = 200;                
    context = canvas.getContext( '2d' );
    document.body.appendChild( canvas );
    
a_stern();


</script>
und von ein paar nicht sachlichen sachen befreit:
Code:
<script type="text/javascript">
function a_stern() {
//VARIABLEN
//-Positionen
    var start = {x: 10, y: 10};    
    var ziel = {x: 150, y: 200};


    var tempPunkt;
    var abstandPP = 10;
//-Lists
    var openList = new Array();


    var closedList = new Array(); 
    closedList.push({
                     x: start.x, 
                     y: start.y, 
                     h: wegFluglinie(start,ziel), //h-geschätzter Weg zum Ziel, g-bisheriger weg zum Punkt
                     g: 0,
                     vorg: 0
                     }); 
//-Zählen
    var a=0;


//Anfang
for (a=0; a<=closedList.length; a++){
    
    tempPunkt = closedList[a];
    tempPunkt.x = tempPunkt.x + abstandPP;
    neuerPunktInOpenList(tempPunkt,a);    
}
    
}


function neuerPunktInOpenList(tempPunkt,a) {
    window.openList;
    window.closedList;
    
    if(!(tempPunkt in closedList) && !(tempPunkt in openList)){
            alert("hallo2");        
    }
}


function wegFluglinie(p1,p2) {
    var strecke = Math.pow((Math.pow(p2.x-p1.x,2)+Math.pow(p2.y-p1.y,2)), 0.5);
    return strecke;
}
    
a_stern();


</script>
leider ist die formatierung meines editors nicht mit kopiert worden(funktioniert nie wenn also wer weiß wieso.. nur so am rande^^)
viele grüße
 
ich habe mir jetzt auch mal, wie Tronjer vorgeschlagen hat, die arrays ausgeben lassen und es hat sich herausgestellt, dass ich die nicht mit

window.array

übergeben konnte! warum? wenn ich die mit der funktion übergebe geht es. warum geht die bequemere lösung mit window.array nicht?

viele grüße
 
Globale Variablen sind sowieso verfügbar. Was du mit window.closedList; und so willst, ist mir ehrlich gesagt total schleierhaft.
 
Werbung:
ich hab das mal irgendwo gesehen und das hat mal irgendein problem gelöst.. glaube ich
hab auch nie verstanden was das genau sein soll..
dachte das wäre sowas wie eine übergabe einer variablen... jetzt übergebe ich die variablen in der funktion und zumindest das geht einwandfrei
vielen dank
 
Ich glaube, in JavaScript hängen globale Variablen und Funktionen am window-Objekt. Das heißt theoretisch, dass du eine globale Variable x entweder per x oder per window.x ansprechen kannst. Das heißt aber auch, dass eine Zeile window.x; nicht viel mehr heißt als x;. Das sind Operationen, die keinerlei Effekt haben. Der Wert der Variablen wird ausgelesen, aber weiterhin passiert nichts.
 
Werbung:
Zurück
Oben