Zu dem Code Beispiel von Kyuu will ich noch kurz etwas ergänzen:

Bei dem folgenden Beispiel wird "global bar" ausgegeben:
Code:
var bar = "global bar";

function getBar() {
  return this.bar;
}

alert(getBar())
Mich persönlich hat das verwirrt, da ich nicht gedacht habe, dass sogar eine var declaration das window objekt erweitert.
Dies passiert allerdings wirklich nur im global scope.

Bei diesem Beispiel wiederum wird "undefined" ausgegeben:
Code:
(function(){
    var bar = "global bar";

    function getBar() {
      return this.bar;
    }

    alert(getBar())
})();
Im Prinzip wird hier eine annonyme Funktion aufgerufen, die den selben Code ausführt, allerdings nicht im global scope.
Was hier funktioniert, wäre folgendes:

Code:
(function(){
    var bar = "global bar";

    function getBar() {
      return bar;
    }

    alert(getBar())
})();
Btw, hier noch ein ganz nettes Video zu JavaScript, das viele Eigenarten der Sprache erklärt. Ist aber auf Englisch und ziemlich lang:

https://www.youtube.com/watch?v=seX7...ayer_embedded#!