Close

16. November 2015

Scopes in JavaScript

JavaScript definiert Scopes – anders als C, Java & Co. – nicht immer mittels geschweifter Klammern. – Scopes in JavaScript folgen jedoch ebenso Regeln. Ein Versuch die Interpretation von JavaScript-Interpretern im Sinne der Scopes zu erklären. 

Das Problem:


void main ()
{
   int counter = 1;

   {
      counter++;

      int secondCounter = 3; 
   }

   counter; // 2
   secondCounter; // unavailable
}

Während die entsprechenden Klammern in C und C-ähnlichen Sprachen jeweils einen eigenen Scope definieren, wäre secondCounter in JavaScript definiert:


function main ()
{
   var counter = 1;

   secondCounter; // undefined

   {
      counter++;

      var secondCounter = 3; 
   }

   counter; // 2
   secondCounter; // 3
}

Da JavaScript nach Deklaration und Definition interpretiert wird und die jeweilige Deklaration zu Beginn eines Scopes einer Methode oder des globalen Kontexts erfolgt, wird die entsprechende Variable innerhalb des vermeintlichen Scopes nicht erzeugt, sondern nur definiert. Aus Interpretationssicht wird main also wie folgt abgearbeitet:


function main ()
{
   var counter;
   var secondCounter;

   counter = 1;

   secondCounter; // undefined

   {
      counter++;

     secondCounter = 3; 
   }

   counter; // 2
   secondCounter; // 3
}

Dies wiederum kann für Backend-Entwickler mit C-ähnlichen Scope-Definitionen zu Verwirrungen führen, sorgt jedoch ebenso für eine hohe Flexibilität, derer sich JavaScript rühmt.

So remember; don’t mess the global scope 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.