Soweit ich das beurteilen kann, ist JS Funktionsbereich und nicht Blockbereich, was bedeutet, dass Objekte, die innerhalb (Klammer) deklariert sind, keinen anderen Ausführungskontext erzeugen. Allerdings:Warum können Sie nicht Funktionen aufrufen, die in Klammern angegeben sind?
$('#firstBtn').click(function first() {
console.log("first activated");
});
$('#secondBtn').click(function() {
console.log("second activated");
first();
});
Returns Reference Error function is undefined
. Die Funktion first
wird innerhalb einer Klammer deklariert, daher sollte sie technisch für andere Funktionen verfügbar sein, die sie aus dem Geltungsbereich aufrufen, in dem sie deklariert wurde.
Aber das funktioniert:
var callDat = $('#firstBtn').click(function first() {
console.log("first activated");
});
$('#secondBtn').click(function() {
console.log("second activated");
callDat.first();
});
Meine Vermutung ist, dass da Objekte sind Funktionen, eine Funktion innerhalb eines Objekts deklarieren kann innerhalb einer anderen Funktionsumfang auch ohne geschweifte Klammern als deklariert zählen. Ich wünsche mir dafür eine definitive Antwort.
In 'function first() {' 'first' ist der Alias erstellt, um die Funktion von sich selbst aufzurufen. 'first' ist von außerhalb von' first' nicht zugänglich. – Tushar
Werfen Sie einen Blick auf [Entmystifizierte Namensausdrücke] (https://kangax.github.io/nfe/). Benannter Funktionsausdruck! == Funktionsdeklaration. Für das zweite Beispiel springen Sie zur völlig falschen Schlussfolgerung. –
Mein Problem, das zweite Beispiel funktioniert nicht. Allerdings hatte ich diese Frage im Hinterkopf, bevor ich meine "Lösung" gefunden habe, also denke ich, dass sie nicht gelöscht werden sollte, obwohl sie vielleicht bearbeitet wurde, um nicht weitere Leser von meiner ursprünglichen Anfrage abzulenken? –