2016-08-14 19 views
0
function foo(a) 
{ 

    var b = a*2; 
    function bar(c) 
    { 

    console.log(a,b,c); 
    var c= 3; 
    } 
    bar(4); 
    var c= 4; 
    var a= 2; 
} 

foo(1); 

Warum c ist nicht 3 hier? Trotz der Tatsache, dass var c = 3, ist im lexikalischen Bereich von bar() definiert, warum var c = 4 ausgewählt ist, obwohl es unterhalb des bar() - Aufrufs definiert ist? Bitte helfen Sie mir zu verstehen, wie diese Werte ausgewählt und den Variablen zugewiesen werden.Suche nach Gültigkeitsbereich der Variablen

+0

Verwenden Sie [diese Suche] (/ search? Q =% 5Bjs% 5D + Variable + Hochziehen), um viele Fragen und Antworten zu diesem Thema zu finden, wie zum Beispiel [this one] (http://stackoverflow.com/questions/33540709/javascript-variable-hosting) und ein ** Bündel ** anderer, einschließlich des dupierten Ziels, das ich gerade markiert habe (in diesem Fall ist es ein globales, aber die Antwort ist dasselbe). –

Antwort

0
  1. c 3 nicht werden, bevor der Auftrag ausgeführt wird, die nach dem Protokoll ausgegeben wird.

  2. var c eine neue Variable hier nicht erklären ist, weil Sie bereits c als Parameter an die Funktion haben (aber Sie haben Recht, dass wenn es so wäre, würde die Erklärung „hochgezogen“ --- und das ist der Begriff Sie suchen nach guten Antworten hier).


Warum var c = 4 selbst gepflückt wird, obwohl es unter der Stange definiert ist() aufrufen?

Es ist nicht "ausgewählt". In Ihrer Funktion sehen Sie 4, weil c der Funktionsparameter ist und Sie es als bar(4) nennen.

Die c von außen Funktion wird durch die lokale Deklaration von einem anderen c in der inneren Funktion beschattet und nicht zugänglich.

Verwandte Themen