Oto kod, który natknąłem:

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

A wynik jest 1!

Po prostu nie wiem dlaczego.

Jeśli chodzi o moje zrozumienie, pierwsza linia zdefiniowała zmienną globalną "foo" do obiektu okna, a wartość jest 1, a następnie w funkcji paska przypisuje foo z 10, ponieważ nie ma "Var" przed foo, więc zmienna globalna "Foo" zostanie przypisany z wartością 10. Następnie powrót, reszta funkcji nie zostanie wykonana.

Ale alerty 1.

Podczas usuwania definicji Foo Foo w funkcji baru powiadomi 10.

1
Wayou 1 grudzień 2013, 10:06

2 odpowiedzi

Najlepsza odpowiedź

Witamy w tajemniczym świecie podnośnika JavaScript :) Przeczytaj ten artykuł, zostaniesz oświecony: http://www.adequatelygood.com/javascript-scoping-and-hoisting.html.

Jako krótka odpowiedź: aby sprawić, że rzeczy działają w takim jak javascript:

hello();

function hello() {
    alert('hello');
}

JavaScript najpierw przenosi wszystkie deklaracje funkcji na górną część kodu, dzięki czemu możesz zadzwonić do dowolnych funkcji "przed" został zdefiniowany. Wierzę, dlaczego foo nie zmieni się na 10, jeśli istnieje deklarację funkcji, ponieważ zachowuje się jak var foo;. Definiujesz funkcję lokalnie, a więc po uruchomieniu foo = 10; po prostu nadpisujesz lokalnie zdefiniowane function foo() za pomocą wartości 10.

3
bagonyi 24 grudzień 2013, 00:19

Powód, dla którego powracający 1 jest dlatego, że foo=10 jest wewnątrz function bar()

Więc foo=10 jest zmienną lokalną i musisz zadzwonić do swojej funkcji dla zmiennej foo do zmiany

Na przykład, jeśli to zrobisz, będzie ostrzec 10

var foo=1;
function bar(){
    foo=10;
    return;
    alert(foo);
}
bar();
1
CRABOLO 1 grudzień 2013, 06:10