Ich habe einen Javascript-Code wie folgt: http://jsfiddle.net/ramchiranjeevi/63uML/

var foo = 1;
function bar() {
    foo = 10;
    return;
    function foo() {}   
}

bar();
console.log(foo);  // returns 1

Wenn der Code ausgeführt wird, die Funktion bar () aufgerufen wird und die globale Variable mit dem Wert 10 überschrieben wird, sollte das Protokoll als 10 gedruckt werden, anstatt als Wert 1.

7
Jeevi 27 Nov. 2013 im 17:06

3 Antworten

Die Funktion foo () {} ist im Bereich von local bar () definiert. Wenn Sie also foo () in bar () neu definieren, wird die Variable für den lokalen Bereich geändert, jedoch nicht global

1
Vladimir Gordienko 27 Nov. 2013 im 13:09

Dies ist ein Javascript-Hebeverhalten. Schauen Sie sich diesen Link an. In Ihrem Fall wird das Skript folgendermaßen interpretiert:

var foo = 1;
function bar() {
    function foo() {}
    foo = 10;
    return; 
}

bar();
console.log(foo);

Weil:

Funktionsdeklarationen und Variablendeklarationen werden vom JavaScript-Interpreter immer unsichtbar an den Anfang ihres enthaltenen Bereichs verschoben ("gehisst")

In Ihrem Fall weisen Sie beim Zuweisen von foo = 10; der lokalen Variablen zu. Deshalb bleibt die globale Variable unverändert.

2
Khanh TO 27 Nov. 2013 im 13:12
function bar() {
  foo = 10;  // define global variable named foo
  return;    // the function return value is "undefined"
  function foo() {}   // define a function named "foo" inside bar function, which means `foo = 10` inside function bar() becomes local variable declaration because "foo" is already defined.
}

Die globale Variable foo ist also überhaupt nicht betroffen.

0
shawmzhu 27 Nov. 2013 im 13:22