HighDots Forums  

Was bedeutet { code } ?

Javascript (German) Programmiersprache JavaScript. (de.comp.lang.javascript)


Discuss Was bedeutet { code } ? in the Javascript (German) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Andreas M.
 
Posts: n/a

Default Was bedeutet { code } ? - 05-04-2008 , 12:05 PM






Hi,

manchmal sehe ich Konstrukte wie:

{
getValue: function(){
return this._value;
},
setValue: function(val){
this._value = val;
}
}

(z.B. in diesem Fall auf
http://ejohn.org/blog/javascript-get...s/#postcomment)

Also die {} als äußerste Begrenzung für irgendwelchen Javascript code
außerhalb von Funktionen oder Object Literals. Was hat es damit auf sich?

--
Bye,
Andreas M.

Reply With Quote
  #2  
Old   
J. Strübig
 
Posts: n/a

Default Re: Was bedeutet { code } ? - 05-05-2008 , 04:24 AM






Andreas M. schrieb:
Hier ist es lediglich ein Beispiel.

Quote:
Also die {} als äußerste Begrenzung für irgendwelchen Javascript code
außerhalb von Funktionen oder Object Literals. Was hat es damit auf sich?
Es ist ein Beispiel.

Struppi.


Reply With Quote
  #3  
Old   
Andreas M.
 
Posts: n/a

Default Re: Was bedeutet { code } ? - 05-05-2008 , 07:54 AM



Am 05.05.2008 11:24 J. Strübig wrote

Quote:
Andreas M. schrieb:
(z.B. in diesem Fall auf
http://ejohn.org/blog/javascript-get...s/#postcomment)

Hier ist es lediglich ein Beispiel.
Auch hier weiß ich inzwischen (ein _bisschen_) mehr. :-)
http://yuiblog.com/blog/2007/06/12/m...comment-140208

Allerdings bin ich noch immer auf der Suche nach einer umfassenden
Erklärung.

--
Bye,
Andreas M.


Reply With Quote
  #4  
Old   
J. Strübig
 
Posts: n/a

Default Re: Was bedeutet { code } ? - 05-06-2008 , 03:04 AM



Andreas M. schrieb:
Quote:
Am 05.05.2008 11:24 J. Strübig wrote

Andreas M. schrieb:
(z.B. in diesem Fall auf
http://ejohn.org/blog/javascript-get...s/#postcomment)

Hier ist es lediglich ein Beispiel.

Auch hier weiß ich inzwischen (ein _bisschen_) mehr. :-)
http://yuiblog.com/blog/2007/06/12/m...comment-140208
Da geht es um was komplett anderes. Mir ist nicht klar wo dein Problem ist.

Die geschweiften Klammern umschliessen einen Block oder erzeugen ein
Objekt je nach Kontext. In deinem ersten Post ist es ein Block, der
entgegen der Aussage von Sven, keinen lokalen Scope erzeugt. Insofern
ist der Block also reichlich überflüssig.

In dem Kommentar geht es um eine anonyme Funktion die direkt aufgerufen
wird, dies kann man nutzen um Variabeln lokal zu halten, da in einem
Funktionsblock die mit var deklarierten Variabeln ausserhalb nicht mehr
sichtbar sind.

Struppi.


Reply With Quote
  #5  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Was bedeutet { code } ? - 05-06-2008 , 01:24 PM



Sven Köhler wrote:
Quote:
manchmal sehe ich Konstrukte wie:

{
getValue: function(){
return this._value;
},
setValue: function(val){
this._value = val;
}
}

(z.B. in diesem Fall auf
http://ejohn.org/blog/javascript-get...s/#postcomment)

Also die {} als äußerste Begrenzung für irgendwelchen Javascript code
außerhalb von Funktionen oder Object Literals.
Diese Beobachtung ist fhcsal. In diesem Fall begrenzen die äusseren `{' und
`}' genau einen ObjectInitializer bzw. ein Objekt-Literal. `getValue' und
`setValue' sind die Namen der Eigenschaften (bzw. hier: Methoden) des mit
dem ObjectInitializer erzeugten Objekts.

Es sind hier Methoden, weil der Eigenschaftswert jeweils eine
Function-Objekt-Referenz ist, die Eigenschaft somit aufgerufen werden kann
(CallExpression).

Diese Function-Objekte werden jeweils on-the-fly mittels FunctionExpression
erzeugt. Die inneren `{' und `}' begrenzen also das der jeweiligen
FunctionExpression zugeordnete BlockStatement.

Quote:
Was hat es damit auf sich?

{
var test;
//hier ist test sichtbar
}
//hier nicht.
Dies gilt dann, und nur dann, wenn `{' und `}' ein BlockStatement begrenzen,
welches zu einem (mit einer FunctionStatement oder einer FunctionExpression
erzeugten) lokalen Ausführungskontext gehört, also einer Funktion/Methode.

ECMAScript-Implementationen unterstützen nämlich kein automatisches
Block-Scoping wie u.a. andere Sprachen der C-Familie. (Erst mit `let' ist
in JavaScript ab Version 1.7 [Firefox 2.0] manuelles Block-Scoping möglich,
siehe <http://PointedEars.de/es-matrix/#let>)

Quote:
Einfach nur ein neuer "Scope-Unterbreich" oder wie man das auch immer
nennen soll.
"Scope" bedeutet Gültigkeits*bereich* (eines Bezeichners, z.B. einer Variablen).

Quote:
var f;
Das ist eine Variablendeklaration.

Quote:
{
var test;
^
f = function() { return test; };
test = 123;
}
Wie sich bereits durch blosses Ausprobieren herausfinden lässt, ist das
folglich ein Syntaxfehler, denn an der markierten Stelle wird ein Bezeichner
oder ein StringLiteral erwartet (Name einer Eigenschaft des mit dem
ObjectInitializer erzeugten Objekts). (`var' ist ein reserviertes Wort,
es kann folglich kein Bezeichner sein.)

Quote:
Den Wert von test solltest du nur über die Funktion f erfragen können,
AFAIK.
Das ist korrekt, wenn `{' und `}' ein BlockStatement eines lokalen
Ausführungskontextes begrenzen, was hier nicht der Fall ist.


PointedEars
--
CSS ist keine Darstellungsvorschrift, sondern ein Darstellungsvorschlag
mit eingebautem "Ich weiß es aber besser"-Recht auf Seiten des userAgent.

(Georg Maaß in dcljs <amuna7$9fbuu$1 (AT) ID-3551 (DOT) news.dfncis.de>)


Reply With Quote
  #6  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Was bedeutet { code } ? - 05-08-2008 , 05:37 AM



Sven Köhler <please-remove-skoehler (AT) upb (DOT) de> wrote:
^
,---------------------'
Quote:
An diese Stelle im From-Header gehört die Adresse einer Mailbox, siehe
RFC1036, RFC2822 und "Die Netiquette für de.*" (nachzulesen u.a. in
de.newusers.infos, de.newusers.questions, de.soc.usenet).

An diese Stelle im Posting gehört eine Einleitungszeile so wie oben (die
Quote:
Absenderadresse ist optional), damit den Zitatebenen leicht ein
Autor zugeordnet werden kann. Siehe auch
http://einklich.net/usenet/usenet1.htm ff.
v
ECMAScript-Implementationen unterstützen nämlich kein automatisches
Block-Scoping wie u.a. andere Sprachen der C-Familie. [...]

Einfach nur ein neuer "Scope-Unterbreich" oder wie man das auch immer
nennen soll.
"Scope" bedeutet Gültigkeits*bereich* (eines Bezeichners, z.B. einer Variablen).

var f;
Das ist eine Variablendeklaration.

{
var test;
^
f = function() { return test; };
test = 123;
}
Wie sich bereits durch blosses Ausprobieren herausfinden lässt, ist das
folglich ein Syntaxfehler, denn an der markierten Stelle wird ein Bezeichner
oder ein StringLiteral erwartet (Name einer Eigenschaft des mit dem
ObjectInitializer erzeugten Objekts). (`var' ist ein reserviertes Wort,
es kann folglich kein Bezeichner sein.)

Wo ist der Syntaxfehler?
Meine Annahme hatte ich begründet.

Wie die weitere Recherche ergab, lag ich damit jedoch falsch. Denn obiger,
ungewöhnlicher Code lässt sich lt. ECMAScript-Grammatik folgendermassen
produzieren:

,-[aus: ECMAScript Ed. 3 Final, Anhang A]
Quote:
Program :
SourceElements

SourceElements :
SourceElement
SourceElements SourceElement

SourceElement :
Statement
FunctionDeclaration

Statement :
Block
[...]
VariableStatement
[...]

Block :
{ StatementList_opt }

StatementList :
Statement
StatementList Statement

VariableStatement :
var VariableDeclarationList ;

VariableDeclarationList :
VariableDeclaration
[...]

VariableDeclaration :
Identifier Initialiser_opt

Was das ausprobieren betrifft:

var f;
{
var test;
test = 1;
}
alert(test);

FireFox 2.0.0.14 akzeptiert den obigen Code.
Aber er zeigt auch, dass die Variable test außerhalb der { } sichtbar ist.
Ja, das ist tatsächlich kein Syntaxfehler, sondern nur zwecklos. Siehe ES3
Final, Abschnitt 12.1.


PointedEars


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.