• 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.

Object Storage Arubacloud
+2 głosów
284 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 (253,100 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 (269,710 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ź 343 wizyt
+3 głosów
1 odpowiedź 242 wizyt
0 głosów
1 odpowiedź 554 wizyt

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...