• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Globalny dostęp do zmiennych w funkcjach.

+2 głosów
613 wizyt
pytanie zadane 28 lipca 2021 w JavaScript przez lucasio99 Początkujący (320 p.)

Dzień dobry,

to mój pierwszy post na forum.

Ale do rzeczy: temat dotyczy zapytania, jak globalnie zmienić wartość globalnej zmiennej w funkcji.

Skrypt to discordowy bot, tak więc używany jest node, nie jest to typowo webowa aplikacja.

let zmienna1 = {wartosc1: 0, wartosc2: 1, wartosc3: 2};

function funkcja1() {
zmienna1.wartosc1 = 1;
}

function funkcja2() {
console.log(zmienna1.wartosc1);
}

Wynik wygląda zaś:

0

Więc: jak globalnie zmienić wartość globalnych zmiennych w funkcji?

 

Z góry dzięki za pomoc

komentarz 28 lipca 2021 przez Zaqu93 Gaduła (4,850 p.)
A wywołujesz te funkcje? Bo jeśli nie to ciężko żeby się podmieniło.
komentarz 28 lipca 2021 przez lucasio99 Początkujący (320 p.)
No raczej...
komentarz 28 lipca 2021 przez Zaqu93 Gaduła (4,850 p.)
let variable = {one: 1, two: 2, three: 3};

function change(variable) {
  variable.one = 4;
}

change(variable);

console.log(variable);

musisz podać zmienną jako argument do funkcji.

komentarz 28 lipca 2021 przez lucasio99 Początkujący (320 p.)
próbowałem to, ale sprawdzę jeszcze raz, może coś pominąłem, i dam znać za jakieś 2 minuty
komentarz 28 lipca 2021 przez lucasio99 Początkujący (320 p.)
let example = {one: 0, two: 1, three: 2};

	function changeEx(example) {
		example.one = 1;
	}

	if (msg.content === '~dev') {
		changeEx(example);
		console.log(example.one);
	}

To mój kod, którym to sprawdziłem, i wygląda na to, że działa.

	let example = {one: 0, two: 1, three: 2};

	function changeEx(example) {
		example.one = 1;
	}

	function showEx() {
		console.log(example.one);
	}

	if (msg.content === '~dev') {
		changeEx(example);
		showEx();
	}

Jeszcze dla pewności sprawdziłem komunikację między funkcjami.

I wynik to 1, czyli dobrze.

Czyli wygląda na to, że musiałem coś przeoczyć, i chyba wiem co. Wielkie dzięki za pomoc. Ale powiedz mi jeszcze, wiele takich zmiennych to trzeba oddzielać przecinkiem?

function blabla (zmienna, zmienna, niezmiennaxd) {}

 

3
komentarz 28 lipca 2021 przez ScriptyChris Mędrzec (190,190 p.)

musisz podać zmienną jako argument do funkcji.

@Zaqu93, nie musi. Na tym polegają zmienne w wyższym scope (w tym globalne), że nie trzeba ich przekazywać do funkcji w parametrze, aby mieć do nich dostęp.

@lucasio99, Twój kod działa, tylko musisz najpierw wywołać funkcja1 (żeby zmienić property w obiekcie), a dopiero potem funkcja2 (żeby wyświetlić zmienną z aktualną, zmienioną wartością). Wywołanie w odwrotnej kolejności lub nie wywołanie funkcja1 nie pokaże zmienionej wartości.

3
komentarz 28 lipca 2021 przez ScriptyChris Mędrzec (190,190 p.)

wiele takich zmiennych to trzeba oddzielać przecinkiem?

@lucasio99, tak - każdy argument funkcji musi być oddzielony przecinkiem. Ale można wszystkie argumenty lub ich przyrostową część pobrać/odczytać jako listę, przy pomocy rest parameters, ewentualnie obiektu arguments (w tym przypadku można całkowicie pominąć listowanie argumentów w nagłówku funkcji).

komentarz 28 lipca 2021 przez VBService Ekspert (256,600 p.)
edycja 28 lipca 2021 przez VBService

Podaję link, bo pasuje do tytułu pytania (Moim zdaniem), dla początkujących, którzy tu trafili, nie sugeruję, że autor pytania nie posiada już tej wiedzy.  smiley

Zasięg zmiennych - javascript

 

wiele takich zmiennych to trzeba oddzielać przecinkiem?

Domyślne wartości funkcji - to do tego co już podał @ScriptyChris

komentarz 28 lipca 2021 przez Wiciorny Ekspert (282,600 p.)

tak tu też warto poznać mechanizm Hoistingu w javascript nie tylko dla zmiennych, ale i funkcji 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
1 odpowiedź 439 wizyt
+3 głosów
1 odpowiedź 776 wizyt
0 głosów
1 odpowiedź 1,000 wizyt

93,695 zapytań

142,612 odpowiedzi

323,223 komentarzy

63,225 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...