Wie benutzt man onclick mit einem Funktionsausdruck und nicht mit einer deklarierten Funktion?

8

Ich habe eine Schaltfläche

%Vor%

, dass ich die Vanilla Javascript Onclick-Methode an die Schaltfläche anhängen und Aufruf beim Klicken starten.

%Vor%

Ich möchte einen Funktionsausdruck verwenden, aber (wegen des Hochziehens?) ruft dies nicht start

auf %Vor%

Eine deklarierte Funktion tut

%Vor%

Wie kann ich schreiben

? %Vor%

so dass es mit einem Funktionsausdruck funktioniert?

Danke

    
javascriptttt 18.12.2014, 21:38
quelle

3 Antworten

2

Ich würde Ihnen zustimmen, dass es sich um ein Problem mit dem Hochfahren handelt. Sie müssen in Ihrem Code nachsehen, um es angemessen zu hissen, bevor Sie startButton.onclick = start; einstellen.

Hier ist, was MDN über die Syntax zu sagen hat:

Es wird ausdrücklich erwähnt, dass die Funktion entweder deklariert oder ausgedrückt werden kann. Was für mich wieder zum Anheben führt, weil Funktionserklärungen automatisch gehisst werden.

Das MDN für onclick verwendet eine Funktionsdeklaration. Ich habe das Beispiel in diesem JSFiddle geändert, um einen Funktionsausdruck zu verwenden, den Sie gerne verwenden würden. Bei ordnungsgemäßem Hochfahren ruft es die richtige Methode auf, wenn Sie auf die Schaltfläche klicken.

    
Adam 18.12.2014, 21:55
quelle
2

Nach der Beschreibung Ihres Problems zu urteilen, deklarieren Sie (und definieren) start , nachdem Sie startButton.onclick zugewiesen haben. In diesem Fall ist startButton.onclick tatsächlich undefined .

Was hochgezogen wird, ist die Variable selbst - Ihr Code weiß, dass er deklariert wurde, aber seinen Wert noch nicht kennt, da die Zuweisung genau dort erfolgt, wo Sie sie im Code haben. Stellen Sie sich Folgendes vor: Wenn Sie das Schlüsselwort var verwenden, deklarieren Sie eine Variable, die jedoch noch nicht definiert ist. Wenn Sie ihm sofort einen Wert zuweisen, ist der neue Wert für den Code über der Zuweisung nicht sichtbar.

Betrachten Sie das folgende Beispiel:

%Vor%

Welchen der drei Werte würden Sie in der Konsole erwarten? 1, 2 oder 3?
Sie können var für einen einzelnen Bezeichner beliebig oft verwenden (obwohl ich es nicht empfehlen würde); aufeinander folgende Deklarationen werden einfach ignoriert, nur die Zuordnungen werden berücksichtigt. Aus diesem Grund kann eine Zuweisung nicht ausgelöst werden.

Funktionserklärungen sind jedoch in gewissem Sinne endlich, sie können in ihrer Gesamtheit gehißt werden, und das ist der Grund, warum die Verwendung einer Funktionsdeklaration in Ihrem Fall funktioniert hat.

Um das Problem zu lösen, könnten Sie tatsächlich eine Funktionsdeklaration verwenden oder die Variablenzuweisung vor startButton.onclick = start; ausführen (und ich denke, dass Sie in diesem Fall wirklich keine Variable brauchen, eine Funktionsdeklaration ist dafür perfekt geeignet Aufgabe).

Beachten Sie, dass Sie auch Folgendes tun könnten:

%Vor%     
rhino 18.12.2014 22:12
quelle
0

Die Ereignisanlage muss nach der Erstellung des Funktionsausdrucks erfolgen.

Gehen Sie zum Beispiel

%Vor%     
Rigotti 18.12.2014 22:19
quelle

Tags und Links