# Math.pow funktioniert nicht innerhalb Funktion/Schleife



## Lighty (20. Apr 2021)

Hallo zusammen

Vorneweg, ich habe keinen programmiertechnischen Hintergrund und habe mir alles selber beigebracht. Insofern bitte ich um Nachsicht.  
Ich spiele den online Fussballmanager Hattrick.org und habe mir in Tampermonkey ein Userscript gebastelt. Funktioniert soweit auch alles wunderbar. Sobald ich aber im Script Math.pow() oder Math.exp() verwende, funktioniert es nicht mehr. Die Frage ist warum und wie ich es lösen kann.

Das Script habe ich zur Veranschaulichung hier hochgeladen: https://jsfiddle.net/vk28a1cn/
Es geht um die Zeile 183, welche Probleme macht. Dabei spielt es keine Rolle, was für eine Basis oder Exponent drin steht. Ich habe das ganze mit einem Alert Aufruf getestet und keine Meldung erhalten. Ebenfalls keine Meldung erhalten habe ich, wenn ich das Snippet zu Beginn der Funktion Math einfügen. Füge ich es in der Funktion Preferences ein, geht es komischerweise.

Kann mir jemand weiter helfen?
Schonmal danke im Voraus.

Gruss Lighty


----------



## Robert Zenz (20. Apr 2021)

Lighty hat gesagt.:


> Vorneweg, ich habe keinen programmiertechnischen Hintergrund und habe mir alles selber beigebracht. Insofern bitte ich um Nachsicht.


Nein, niemals! Aber du solltest dir eine IDE suchen welche dir den Code automatisch formatiert, das wird dir eine Menge Kopfschmerzen ersparen in Zukunft.

Zu deinem Problem, wenn ich das richtig sehe definierst du "Math" als Funktion in Zeile 29, was dann natuerlich das globale "Math" Objekt ueberschreibt. Du musst deine Funktion anders benennen damit du nicht das globale Objekt mit dem selben Namen ueberschreibst.


----------



## Lighty (20. Apr 2021)

Könnte gerade meinen Kopf an die Wand schlagen. Wäre ja so offensichtlich gewesen. -.-
Danke für die prompte Hilfe.


----------



## mihe7 (20. Apr 2021)

Du könntest den Kommentar von @Robert Zenz als korrekte Antwort markieren, dann würde man gleich sehen, dass der Spaß abgeschlossen ist


----------



## Lighty (7. Mai 2021)

Ich hätte da noch eine Anschlussfrage, die aber nichts mehr mit der ursprünglichen Frage zu tun hat. Wollte aber nicht extra ein Thema eröffnen (ausser, es sollte niemand antworten^^).

Und zwar habe ich einen loop und ausserhalb des loops definierte Variabeln. Wie kann ich jetzt die Werte der Variabeln "dynamisch" in den Loop holen? Die Variante aus dem Code macht ja ein String daraus, soll aber mein Problem zeigen. 

Hier ein Beispiel:

```
var TH1 = 3;
var TH2 = 5;
var TH3 = 8;
var TH4 = 7;

var c = 1

while (c<=4) {
var TH = 'TH'+c;
alert(TH);
c++
}
```


----------



## Robert Zenz (7. Mai 2021)

In diesem Fall, waere die Antwort ein Array Anstelle einzelner Variablen. Dann kannst du das Array einfach per Index betreten.

Ansonsten, wenn ich mich richtig erinnere landen alle globalen Variablen in "window". Also dann so etwas wie


```
var value = window["variableofthisname"];
```


----------



## Lighty (7. Mai 2021)

Danke für die schnelle Antwort. Das eigentliche Script ist etwas komplexer als mein Beispiel oben. So pauschal wüsste ich jetzt nicht gerade, wie ich dies mit einem Array lösen sollte. Ich habe das Beispiel für ein besseres Verständnis nochmals kurz überarbeitet/erweitert. Da gibt es x Definitionen ob U21 oder NT und verschiedenste Profile die abgearbeitet werden müssten... Mein unwissendes Hirn sagt mir, dass man doch irgendwie die die beiden Teile wieder als Variable definiere könnte, damit mit dieser die Werte ausserhalb des Loops ausgelesen werden könnten.


```
if (Liste.match("Tor") && SelectNT.match("U21")) {

        columns = 1;

        SetTH1 = "TW"
        SetZSTW1= 17; SetTW1="checked";
        SetZSVT1= 5; SetVT1="checked";
        SetZSSA1= 0; SetSA1="";
        SetZSFL1= 0.0; SetFL1="";
        SetZSPS1= 8; SetPS1="";
        SetZSTS1= 0.0; SetTS1="";
        SetZSSS1= 17; SetSS1="checked";
        SetZSA1= 21;
        SetZSSpez1 = ""

    };
 

   if (Liste.match("Aussenverteidiger") && SelectNT.match("U21")) {

        columns = 3;

        SetTH1 = "AVn"
        SetZSTW1= 0; SetTW1="";
        SetZSVT1= 13.5; SetVT1="checked";
        SetZSSA1= 0; SetSA1="";
        SetZSFL1= 11.5; SetFL1="checked";
        SetZSPS1= 6; SetPS1="checked";
        SetZSTS1= 0.0; SetTS1="";
        SetZSSS1= 0; SetSS1="";
        SetZSA1= 21;
        SetZSSpez1 = "";

        SetTH2 = "K-AV"
        SetZSTW2= 0.0; SetTW2="";
        SetZSVT2= 14; SetVT2="checked";
        SetZSSA2= 0; SetSA2="";
        SetZSFL2= 8; SetFL2="checked";
        SetZSPS2= 8.25; SetPS2="checked";
        SetZSTS2= 0; SetTS2="";
        SetZSSS2= 0; SetSS2="";
        SetZSA2= 21;
        SetZSSpez2 = "";

        SetTH3 = "AV-SS"
        SetZSTW3= 0.0; SetTW3="";
        SetZSVT3= 13.25; SetVT3="checked";
        SetZSSA3= 0; SetSA3="";
        SetZSFL3= 8; SetFL3="checked";
        SetZSPS3= 6.25; SetPS3="checked";
        SetZSTS3= 0; SetTS3="";
        SetZSSS3= 17; SetSS3="checked";
        SetZSA3= 21;
        SetZSSpez3 = "";

    };

    if (Liste.match("Mittelfeld") && SelectNT.match("U21")) {

        columns = 3;

        SetTH1 = "IMn"
        SetZSTW1= 0; SetTW1="";
        SetZSVT1= 0; SetVT1="";
        SetZSSA1= 16; SetSA1="checked";
        SetZSFL1= 0; SetFL1="";
        SetZSPS1= 6.5; SetPS1="checked";
        SetZSTS1= 0.0; SetTS1="";
        SetZSSS1= 0; SetSS1="";
        SetZSA1= 21;
        SetZSSpez1 = "";

        SetTH2 = "IMoff"
        SetZSTW2= 0.0; SetTW2="";
        SetZSVT2= 0; SetVT2="";
        SetZSSA2= 12; SetSA2="checked";
        SetZSFL2= 0; SetFL2="";
        SetZSPS2= 13.5; SetPS2="checked";
        SetZSTS2= 0; SetTS2="";
        SetZSSS2= 0; SetSS2="";
        SetZSA2= 21;
        SetZSSpez2 = "";

        SetTH3 = "IMdef"
        SetZSTW3= 0.0; SetTW3="";
        SetZSVT3= 7.25; SetVT3="checked";
        SetZSSA3= 15.75; SetSA3="checked";
        SetZSFL3= 0; SetFL3="";
        SetZSPS3= 0; SetPS3="";
        SetZSTS3= 0; SetTS3="";
        SetZSSS3= 0; SetSS3="";
        SetZSA3= 21;
        SetZSSpez3 = "";


};



var c = 1

while (c<=columns) {
var SetTH = 'SetTH'+c;
var SetZSTW = 'SetZSTW'+c;
var SetZSVT = 'SetZSVT'+c;
var SetZSSA = 'SetZSSA'+c;
var SetZSFL = 'SetZSFL'+c;
var SetZSPS = 'SetZSPS'+c;
var SetZSTS = 'SetZSTS'+c;
var SetZSSS = 'SetZSSS'+c;

// Berechnungen mit den Werten der verschiedenen Variabeln
c++
}
```


----------



## Robert Zenz (7. Mai 2021)

Gegenvorschlag: Du scheinst hier ein Menge Variablen zu haben welche immer zusammen gehoeren, das schreit foermlich nach einem Objekt.

Die Objekt-Instanzen kannst du dann in Array packen und dann die Eigenschaften von jeder Instanz verwenden.


```
var objects = [];
objects[0] = newObjectHoweverThatWorksInJavaScript();
objects[1] = newObjectHoweverThatWorksInJavaScript();
objects[2] = newObjectHoweverThatWorksInJavaScript();

// SNIP

objects[1].zsvt = "wert";

// SNIP

for (let object in objects) {
    var result = object.irgendeinWert + object.andererWert;
}
```


----------

