1. Lokale Variablen werden zuerst verwendet und dann deklariert, was keine Auswirkungen auf externe Variablen mit demselben Namen hat.
Kopieren Sie den Codecode wie folgt:
var x = 1; // --> externe Variable x
Funktion fn(){
Alert(x); // --> undefinierte lokale Variable x wird zuerst verwendet
var x = 2; // später deklarieren und zuweisen
}
fn();
alarm(x); // --> 1<BR>
Der erste Punkt ist, dass der erste Satz in der Funktion fn x ausgibt und x im zweiten Satz definiert ist. Dies ist in JS zulässig und bedeutet hier, dass das Programm ohne Syntaxfehler ausgeführt werden kann.
In anderen Sprachen wie C und Java ist dies jedoch nicht zulässig. Variablen müssen vor der Verwendung deklariert werden, z
Kopieren Sie den Codecode wie folgt:
öffentlicher Klassentest {
public static void main(String[] args) {
System.out.println(x); //Zuerst verwenden
int x = 10; // Post-Deklaration
}
}
In Java meldet der Compiler einen Fehler und das Programm kann nicht ausgeführt werden.
Der zweite Punkt ist, dass die lokale Variable x innerhalb der Funktion fn keinen Einfluss auf die externe Variable x hat. Das heißt, die Alarmausgabe in fn ist nicht 1, sondern undefiniert.
Zweitens haben formale Parameter eine höhere Priorität als Funktionsnamen.
Kopieren Sie den Codecode wie folgt:
Funktion fn(fn){
alarm(fn);
}
fn('hello'); // --> "Hallo"
Sie können sehen, dass der Funktionsname und der formale Parameter denselben Namen wie fn haben und die Ausgabe die Zeichenfolge „Hallo“ ist, jedoch nicht der Funktionskörper (fn.toString ()) der Funktion fn.
Drittens haben formale Parameter eine höhere Priorität als Argumente.
Kopieren Sie den Codecode wie folgt:
Funktion fn(Argumente){
alarm(argumente);
}
fn('hello'); // --> "hello"<BR>
Das Argumentobjekt kann direkt innerhalb der Funktion verwendet werden und ist ein spezieller Bezeichner, der von der Sprache selbst bereitgestellt wird.
Hier kommt es vor, dass der Formalparameter mit demselben Namen deklariert wird. Sie können sehen, dass die Ausgabe „Hallo“ anstelle von „[Objekt Objekt]“ lautet, d. h. die formalen Parameterargumente decken die tatsächlichen Argumente ab, die von der Sprache selbst bereitgestellt werden.
4. Formale Parameter haben eine höhere Priorität als lokale Variablen, die deklariert, aber nicht zugewiesen werden.
Kopieren Sie den Codecode wie folgt:
Funktion fn(a){
var a;
Warnung(a);
}
fn('hello'); // --> "Hallo"
Der formale Parameter der Funktion fn ist a. Der erste Satz in der Funktion deklariert nur die lokale Variable a, weist jedoch keinen Wert zu. Daran, dass das Ausgabeergebnis „Hallo“ statt „undefiniert“ lautet, lässt sich erkennen, dass der formale Parameter a eine höhere Priorität hat als die lokale Variable a, die nur deklariert, aber keinem Wert zugewiesen wird.
5. Deklarierte und zugewiesene lokale Variablen haben eine höhere Priorität als formale Parameter.
Kopieren Sie den Codecode wie folgt:
Funktion fn(a){
var a = 1;
Warnung(a);
}
fn('hello'); // --> "1"
Der formale Parameter der Funktion fn ist a. Der erste Satz in der Funktion deklariert nur die lokale Variable a und weist ihr den Wert 1 zu. Aus dem Ausgabeergebnis „1“ statt „Hallo“ können wir ersehen, dass die deklarierte und zugewiesene lokale Variable a eine höhere Priorität hat als der formale Parameter a.
6. Wenn formale Parameter lokalen Variablen mit demselben Namen zugewiesen werden
Kopieren Sie den Codecode wie folgt:
Funktion fn(a){
var a = a;
Warnung(a);
}
fn('Hallo');
Führen Sie es noch nicht aus, sondern erraten Sie das Ergebnis. Wenn Sie Punkt 5 befolgen: Deklarierte und zugewiesene lokale Variablen haben eine höhere Priorität als formale Parameter. Dann wird a undefiniert sein. Aber tatsächlich ist a „Hallo“, das heißt, das rechte a ist der formale Parameter a und das linke a ist die lokale Variable a.
Die beiden a's hier stören sich nicht gegenseitig und keines deckt das andere ab. Das steht im Widerspruch zu dem, was ich gerade gesagt habe: Zugeordnete lokale Variablen haben eine höhere Priorität als formale Parameter. Aber die Engine macht, was wir wollen, denn wir wollen nicht, dass a nach var a = a undefiniert ist.