Wie nennt man diese JavaScript-Syntax, damit ich sie recherchieren kann?

8

1) Was ist im folgenden Code der Grund dafür, dass gameOfLive eine Variable ist und nicht nur function gameOfLife() ?

2) Was ist gol ? Es scheint wie ein Array, aber ich bin nicht vertraut mit der Syntax oder wie es heißt.

Ich lerne Ссылка

%Vor%     
jason 08.07.2010, 21:43
quelle

7 Antworten

15
%Vor%

ist ein Funktionsausdruck , während

%Vor%

ist eine Funktionsdeklaration .

Um Juriy 'kangax' Zaytsev über Funktionsausdrücke vs. Funktionsdeklarationen zu zitieren :

  

Es gibt einen feinen Unterschied in   Verhalten von Deklarationen und   Ausdrücke.

     

Zunächst Funktionsdeklarationen   werden vor jedem analysiert und ausgewertet   andere Ausdrücke sind. Selbst wenn   Die Deklaration wird zuletzt in a positioniert   Quelle wird es ausgewertet werden    vor allen anderen Ausdrücken , die in einem Bereich enthalten sind.   [...]

     

Ein anderer   wichtiges Merkmal der Funktion   Deklarationen sind das Deklarieren   bedingt ist nicht standardisiert und   variiert in verschiedenen Umgebungen.   Sie sollten sich nie auf Funktionen verlassen   unter Vorbehalt erklärt und benutzt werden   Funktion Ausdrücke stattdessen.

In diesem Fall, wie Joel Coehoorn in einem Kommentar erwähnt, ist gameOfLife bedingt definiert, also muss ein Funktionsausdruck verwendet werden.

Ein allgemeiner Anwendungsfall für diese bedingt definierten Funktionen ist die Verbesserung der JavaScript-Funktionalität in Browsern, die keine native Unterstützung für neuere Funktionen haben (in früheren ECMAScript / JavaScript-Versionen nicht verfügbar). Sie möchten dies nicht mit Funktionsdeklarationen tun, da diese die native Funktionalität sowieso überschreiben werden, was höchstwahrscheinlich nicht Ihren Vorstellungen entspricht (unter Berücksichtigung der Geschwindigkeit usw.). Ein kurzes Beispiel davon:

%Vor%

Ein Hauptnachteil von Funktionsausdrücken besteht darin, dass Sie einer Variablen tatsächlich eine anonyme Funktion zuweisen. Dies kann das Debuggen erschweren , da der Funktionsname normalerweise nicht bekannt ist, wenn die Skriptausführung angehalten wird (z. B. an einem Haltepunkt setzen Sie). Einige JavaScript-Debugger, wie Firebug, versuchen, den Namen der Variablen anzugeben, der die Funktion zugewiesen wurde, aber da der Debugger dies erraten muss, indem er den Inhalt des Skripts im Handumdrehen analysiert, kann dies zu schwierig sein (was zu einem (?)() wird anstelle eines Funktionsnamens angezeigt oder ist sogar falsch.

(zum Beispiel lesen Sie weiter auf der Seite, obwohl der Inhalt nicht ganz für Anfänger geeignet ist)

    
Marcel Korpel 09.07.2010, 00:18
quelle
15
  1. In JavaScript sind Funktionen erstklassige Objekte . Sie könnten sie in Objekten (Variablen) speichern und sie als Argumente an Funktionen übergeben. Jede Funktion ist eigentlich ein Function -Objekt.

  2. gol ist ein Objekt, das mit dem Objektliteral Notation.

Daniel Vassallo 08.07.2010 21:49
quelle
4
  

1) Was ist im folgenden Code der Grund dafür, dass gameOfLive eine Variable ist und nicht nur eine "function gameOfLife ()"?

Auf der globalen Ebene definierte Variablen sind Mitglieder des Fensterobjekts. Indem Sie es zu einer Variablen machen, können Sie die Syntax window.gameOfLife() verwenden. Deshalb können sie den if (!window.gameOfLife) check am Anfang Ihres Snippets verwenden.

Aber das erklärt nicht wirklich, warum sie es so gemacht haben, und eine Funktionsdeklaration würde das Gleiche tun. Marcel Korpels Antwort erklärt besser das "Warum" der beiden Optionen.

  

2) was ist gol? Es scheint wie ein Array, aber ich bin nicht vertraut mit der Syntax oder wie es heißt.

Die Syntax wird als kompakte Objektnotation bezeichnet. Interessant ist hier, dass das "kompakte" Objekt innerhalb einer Funktion deklariert wird. Das Deklarieren eines Objekts in einer Funktion wie dieser ist nützlich, da Sie es verwenden können, um JavaScript-Objekte mit (effektiv) privaten Elementen zu erstellen.

Der Schlüssel ist, sich daran zu erinnern, dass Funktionen und Objekte in Javascript dasselbe sind . Daher ist die vollständige Funktion gameOfLife() in Wirklichkeit eine Objektdefinition. Darüber hinaus ist das Objekt gol , das als Mitglied von gameOfLife deklariert wurde, höchstwahrscheinlich Teil einer allgemeinen Technik zum Definieren privater Mitglieder. Die gameOfLife() Funktion / Objekt wird dieses gol -Objekt zurückgeben. Alle anderen Elemente, die innerhalb der gameOfLife() -Funktion / -Objekt deklariert sind, werden effektiv private Mitglieder der zurückgegebenen gol -Instanz, während alles, was innerhalb des gol -Objekts deklariert ist, öffentlich ist. Was sie wirklich machen wollen, ist schließlich Code wie folgt zu schreiben:

%Vor%

Wenn sie das tun, wird die Spielvariable ein gol -Objekt enthalten. Die Methoden in diesem Objekt haben weiterhin Zugriff auf Elemente, die in der vollständigen Funktion gameOfLife() deklariert sind, anderer Code jedoch nicht (zumindest nicht so einfach). Daher sind diese Elemente effektiv privat. Elemente im Objekt gol sind noch öffentlich. Somit haben Sie ein Objekt mit privaten und öffentlichen Membern für eine korrekte Kapselung / Informationsverbergung, genau wie Sie es mit anderen objektorientierten Sprachen erstellen würden.

Joel Coehoorn 08.07.2010 22:27
quelle
2

Wenn Sie eine Funktion in eine Variable einfügen, können Sie später dazukommen und sie durch eine andere Funktion ersetzen, die die Funktion transparent für den Rest Ihres Codes ersetzt. Dies ist dasselbe, was Sie tun, wenn Sie "onClick=" in einem Formular-Widget angeben.

    
Curtis 08.07.2010 21:51
quelle
1

sicher: um die Syntax zu erklären:

Funktionen sind erstklassige Objekte in Javascript, so dass Sie eine Funktion in eine Variable einfügen können. daher ist der Hauptteil dieses Codes tatsächlich eine Funktionsdefinition, die in var gameOfLife gespeichert ist und später durch Aufruf von:

verwendet werden kann %Vor%

gol ist ein Objekt (Hash), und "init" ist ein weiteres Beispiel für die obige Syntax, außer dass es direkt in den "init" Schlüssel im "gol" Hash eingegeben wird. So das Funktion könnte wiederum aufgerufen werden:

%Vor%     
eruciform 08.07.2010 21:50
quelle
1

Laut dieser Seite ist die Angabe von gameOfLife auf ihre Art nicht anders als die Anmeldung als Ihre Weg. Die Art, wie sie gol definieren, macht es zu einem Objekt (oder Sie können es sich als assoziatives Array vorstellen). Eine ähnliche Abkürzung für Arrays besteht darin, eckige Klammern anstelle von geschweiften Klammern zu verwenden.

    
TNi 08.07.2010 21:50
quelle
0

Eine Funktion als Variable zu betrachten, kann nützlich sein, wenn Sie möchten, dass eine Funktion eine Eigenschaft eines Objekts ist. (Siehe: Ссылка )

Ich glaube, dass gol ein JavaScript-Objekt ist, das in Name / Wert-Paaren beschrieben wird - ähnlich wie das JSON-Format. (Siehe: Ссылка )

    
amfeng 08.07.2010 21:48
quelle