Używam JavaScript i tworzę zmienną globalną. Definiuję to poza funkcją i chcę zmienić wartość zmiennej globalnej z wnętrza funkcji i użyć jej z innej funkcji, jak to zrobić?
źródło
Używam JavaScript i tworzę zmienną globalną. Definiuję to poza funkcją i chcę zmienić wartość zmiennej globalnej z wnętrza funkcji i użyć jej z innej funkcji, jak to zrobić?
Po prostu odwołaj się do zmiennej wewnątrz funkcji; bez magii, po prostu użyj jej nazwy. Jeśli został utworzony globalnie, zaktualizujesz zmienną globalną.
Możesz nadpisać to zachowanie, deklarując je lokalnie przy użyciu var
, ale jeśli nie używasz var
, nazwa zmiennej używana w funkcji będzie globalna, jeśli ta zmienna została zadeklarowana globalnie.
Dlatego za najlepszą praktykę uważa się zawsze jawne deklarowanie zmiennych za pomocą var
. Bo jeśli o tym zapomnisz, możesz przypadkowo zacząć bawić się globalnymi. To łatwy błąd. Ale w twoim przypadku sytuacja się odwraca i staje się łatwą odpowiedzią na twoje pytanie.
console.log
jest on uruchamiany natychmiast, ale funkcja Ajax sukcesu działa tylko w pewnym momencie później, gdy wywołanie Ajax faktycznie zwraca odpowiedź. Jest to fundamentalna kwestia dotycząca asynchronicznej natury Ajax: kod w funkcjach zamykających nie działa w kolejności z kodem wokół niego. Jest to ważne, aby zrozumieć, ucząc się kodu sterowanego zdarzeniami.var a = 10; myFunction(); function myFunction(){ a = 20; } alert("Value of 'a' outside the function " + a); //outputs 20
źródło
Po prostu użyj nazwy tej zmiennej.
W JavaScript zmienne są lokalne tylko dla funkcji, jeśli są parametrami funkcji lub jeśli deklarujesz je jawnie jako lokalne, wpisując
var
słowo kluczowe przed nazwą zmiennej.Jeśli nazwa wartości lokalnej ma taką samą nazwę jak wartość globalna, użyj
window
obiektuZobacz to jsfiddle
x = 1; y = 2; z = 3; function a(y) { // y is local to the function, because it is a function parameter console.log('local y: should be 10:', y); // local y through function parameter y = 3; // will only overwrite local y, not 'global' y console.log('local y: should be 3:', y); // local y // global value could be accessed by referencing through window object console.log('global y: should be 2:', window.y) // global y, different from local y () var x; // makes x a local variable x = 4; // only overwrites local x console.log('local x: should be 4:', x); // local x z = 5; // overwrites global z, because there is no local z console.log('local z: should be 5:', z); // local z, same as global console.log('global z: should be 5 5:', window.z, z) // global z, same as z, because z is not local } a(10); console.log('global x: should be 1:', x); // global x console.log('global y: should be 2:', y); // global y console.log('global z: should be 5:', z); // global z, overwritten in function a
Edytować
Wraz z ES2015 pojawiły się jeszcze dwa słowa kluczowe
const
ilet
, które również wpływają na zakres zmiennej ( specyfikacja języka )źródło
<script> var x = 2; //X is global and value is 2. function myFunction() { x = 7; //x is local variable and value is 7. } myFunction(); alert(x); //x is gobal variable and the value is 7 </script>
źródło
var
słowa kluczowego wewnątrz funkcji, wtedy nie musisz się z tym uporaćdocument.getElementById("outside").value = x;
var a = 10; myFunction(a); function myFunction(a){ window['a'] = 20; // or window.a } alert("Value of 'a' outside the function " + a); //outputs 20
Za pomocą window [' nazwa_zmiennej '] lub window.variableName możesz modyfikować wartość zmiennej globalnej wewnątrz funkcji.
źródło