Also habe ich ein gutes Verständnis der meisten statischen typisierten Sprachen vor allem C und C++. Aber als ich in Javascript ging, bemerkte ich etwas, das mich aus der Fassung brachte.Warum funktionieren JavaScript-Funktionen so?
Ich habe gelernt, diese Funktion zu schreiben, mit inneren HTML zu interagieren:
document.getElementById("SomeHTML").onclick = function(){
document.getElementById("AnotherHTML").innerHTML = "<p> Joe has a cat </p>";
}
Das ist alles schön und gut, aber es ist ein Problem. Wie soll ich das wieder verwenden soll und es lesbar zu halten ... kommt aus einem C++, wurde ich immer gelehrt Code auf diese Weise zu schreiben:
function MyFunc()
{
document.getElementById("AnotherHTML").innerHTML = "<p> Joe has a cat </p>";
}
document.getElementById("SomeHTML").onclick = MyFunc();
Dieser Code sauberer zu sein (zumindest für mich) und Ich kann die Funktion wiederverwenden, aber es funktioniert nicht ... Ich kann diesen Weg in jeder Programmiersprache schreiben, aber in Javascript erzeugt es einen Fehler. Ich weiß nicht, was ich vermisse, ich weiß, es ist etwas Einfaches. Kann mir bitte jemand helfen, zu verstehen, warum ich auf diese Weise JavaScript-Funktionen nicht schreiben kann? Oder wenn ich mir bitte sagen kann, wie, weil ich letzteres viel lieber als das erstere bevorzuge. Danke im Voraus.
Der letzte Code wird in JavaScript auch funktionieren –
'.onclick = MyFunc()' ist das Ergebnis der 'MyFunc();' zuweisen. Verwenden Sie '.onclick = MyFunc;' stattdessen. Sie können auch den TypeScript-Playground ausprobieren, um den Fehler https://www.typescriptlang.org/play/index.html#src=function%20MyFunc()%0D%0A%7B%0D%0A%20%20%20 zu sehen % 20% 20% 20% 20% 20% 20% 20% 20document.getElementById (% 22AndereHTML% 22) .innerHTML% 20% 3D% 20% 22% 3Cp% 3E% 20Joe% 20has% 20a% 20cat% 20% 3C % 2Fp% 3E% 22% 3B% 0D% 0A% 7D% 0D% 0A% 0D% 0Adocument.getElementById (% 22SomeHTML% 22) .onclick% 20% 3D% 20MyFunc()% 3B – Slai
@Slai hat recht und ironisch Der von Ihnen vorgeschlagene Code würde auch in C++ nicht funktionieren. Sie müssen die Funktion dem Handler zuweisen, nicht das Ergebnis seiner Ausführung (oder Sie müssen eine Funktion als eine Rückkehr Ihrer Bewertung zurückgeben) – Eineki