2014-11-12 7 views

Antwort

3

Von the MDN:

kein JavaScript Blockanweisung Umfang haben; eine Variable , die innerhalb eines Blocks deklariert wird, ist lokal für die Funktion (oder den globalen Bereich) , in der sich der Block befindet.

Der Umfang einer Variablen in JavaScript ist die gesamte Funktion, in der sie (bzw. die globale Reichweite) deklariert ist, so dass Sie nur eine Variable local hier haben.

Ihr Code entspricht

function foo() 
{ 
    var local; 
    local = 1; 
    { 
    local = 2; 
    } 
    return local; 
} 
foo() 

Beachten Sie, dass ES6 (die neue Norm von JavaScript) einführen macht einen lexical scoping with let aber it's not yet really available.

+0

Es ist verfügbar für Firefox und Nodejs Harmonie. – simonzack

+1

@simonzack Hast du nicht bemerkt, dass ich mit dem Kangax-Tisch verbunden bin? Wenn OP nicht Server-Code-codiert ist, kann er es sich nicht leisten, mit IE und Chrome nicht kompatibel zu sein. Deshalb habe ich gesagt "nicht wirklich verfügbar". –

+0

Ah ich sehe, ich habe nicht auf Ihren Link geklickt. – simonzack

5

In Javascript gibt es nur Funktionsumfang und globalen Geltungsbereich. Sie können keinen Blockbereich erstellen, er fügt keine besondere Bedeutung hinzu und erstellt keinen Bereich.

Und das ist, wie Sie Ihren Code endet

function foo() 
{ 
    var local = 1; 
    local = 2; 
    return local; 
} 
foo(); 

In ES6 können Sie auf Blockebene Bereiche mit Hilfe von Let erstellen. ES6 wird noch nicht unterstützt. mehr dazu here

+2

Es sollte angemerkt werden, dass der lexikalische Umfang in naher Zukunft mit ES6 let-Schlüsselwort kommen wird. – Capaj

Verwandte Themen