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

JS - zwróć wartość i wywołaj funkcję ze zwróconą wartością

VPS Starter Arubacloud
0 głosów
890 wizyt
pytanie zadane 4 września 2016 w JavaScript przez Kamil Naja Nałogowiec (27,330 p.)

Cześć, w js potrzebuję dwóch funkcji. Pierwsza robi obliczenia i zwraca wartość zmiennej przez return, a następnie wywołuje drugą funkcję. Ta druga, używa parametru z pierwszej funkcji do swoich obliczeń. Problem jest w tym, że nie mogę jednocześnie przekazać wartości do drugiej funkcji i jej wywołać przez pierwszą :/

Jak to rozwiązać? Poniżej załączam kod

		function addition () {
				var first = 1;
				var second = 2;
				var sum = first + second;
				console.log(sum);
				//nie można jednocześnie zwrócić wartości i wywołać funkcji?
				multiplication();
				return sum
		}
		function multiplication () {
				var multiSum = addition;
				var multi2 = addition * 2;
				console.log(multi2); //nan :(
		}
		addition();

 

komentarz 4 września 2016 przez hun1er76 Stary wyjadacz (11,960 p.)
W drugiej funkcji podstawiasz zmienną (addition), która nie jest wcześniej zadeklarowana.

2 odpowiedzi

+1 głos
odpowiedź 4 września 2016 przez gnx Dyskutant (7,720 p.)
function multiplication (sum) {
        var multi2 = sum * 2;
        console.log(multi2); //6
        return multi2
}

function addition () {
        var first = 1;
        var second = 2;
        var sum = first + second;
        console.log(sum); //3
        return multiplication(sum);
}

console.log(addition()); //6

Czy o to chodziło?
Funkcja addition zwraca jako swój return wynik funkcji multiplication, do której wpierw przekazuje wynik swojej operacji sumowania.

komentarz 4 września 2016 przez Kamil Naja Nałogowiec (27,330 p.)

Tak, wpadałem na podobną odpowiedź, dziękuję za naprowadzenie. Wywołujemy w kodzie 2 funkcję, a pierwsza znajduje się w kodzie tej drugiej. Błędem był brak nawiasu. Dziękuję i pozdrawiam

function costam (num) {
		return num;
}
function alertcos () {
		var myNum = costam(5);
		alert(myNum);
}

alertcos();

 

komentarz 4 września 2016 przez gnx Dyskutant (7,720 p.)
Cieszę się, powodzenia :)
komentarz 4 września 2016 przez Kamil Naja Nałogowiec (27,330 p.)
edycja 4 września 2016 przez Kamil Naja

Podczas rozbudowy kodu, napotkałem kolejną trudność. W aplikacji chciałbym zrobić proste menu w formie listy w której każdy element, ma cyfrowe ID.

	<nav class="nav">
		<ul class="main-menu">
			<li id="100">100</li>
			<li id="200">200</li>
			<li id="300">300</li>
		</ul>
	</nav>

Następnie ustawiam event listenera na każdy z tych elementów (wiem, że można zrobić w pętli, ale dajny dla uproszczenia w ten sposób);

    var liElement = document.getElementById("100");
       liElement.addEventListener("click", getDimension);
   //kolejne dla następnych

Funkcja getDimensions ma wykorzystać id klikniętego elementu, jako parametru, do stworzenia diva o odpowiednich wymiarów. W jaki sposób przekazać jej parametr ID, pobrany z klikniętego elementu?

Przykładowy kod mógłby wyglądać tak (ale nie działa). 

function getDimensions () {
    newDiv = document.createElement('div');//tutaj wartość klikniętego elementu
    var num = eventListeners();
    canvasDiv.style.width = num + "px";
    canvasDiv.style.height = num + "px";
    //potem dodać element do drzewa dom
}
function eventListeners () {
    //jak przekazać, który element był kliknięty?
    var liElement = document.getElementById("100");
        liElement.addEventListener("click", getDimensions);
    var liElement2 = document.getElementById("200");
        liElement2.addEventListener("click", getDimensions);
    var liElement3 = document.getElementById("300");
        liElement3.addEventListener("click", getDimensions);
}
eventListeners();

Gdy dostaję się do wydarzenie przez this, jslint wyrzuca błąd o naruszeniu trybu strict.

1
komentarz 4 września 2016 przez gnx Dyskutant (7,720 p.)
function getDimension(event){
	console.log(event.currentTarget.id); //100
}

var liElement = document.getElementById("100");
liElement.addEventListener("click", getDimension);

Gdy podpinasz pod event jakąś funkcję, do niej przekazywany jest atrybut który zawiera dane obecnego wydarzenia - w tym obiekt, który bierze w nim udział - "currentTarget". Używając kodu powyżej możesz dostać się do jego ID.

komentarz 4 września 2016 przez Kamil Naja Nałogowiec (27,330 p.)
Dziękuję, kod działa. Czy to rozwiązanie, jest lepsze od użycia this.id, które także działa?
2
komentarz 4 września 2016 przez ScriptyChris Mędrzec (190,190 p.)

 przekazywany jest atrybut który zawiera dane obecnego wydarzenia - w tym obiekt, który bierze w nim udział - "currentTarget"

Nie. Przekazywany jest obiekt event, którego atrybutem jest currentTarget.

Co do event.target vs event.currentTarget, to miej świadomość, że jest pomiędzy nimi różnica spowodowana istnieniem zjawiska "bąbelkowania" zdarzeń w DOM:

http://www.quirksmode.org/js/events_order.html

https://developer.mozilla.org/en-US/docs/Web/API/Event/target

https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget

Przykład: http://codepen.io/ChrissP92/pen/RGNRxZ?editors=1010

Jest jeszcze parę innych: https://developer.mozilla.org/en-US/docs/Web/API/Event/Comparison_of_Event_Targets

0 głosów
odpowiedź 4 września 2016 przez niezalogowany

Nie bardzo rozumiem co chcesz osiągnąć.

var multiSum = addition; <- w tym miejscu przypisujesz funkcję do zmiennej.

 var multi2 = addition * 2; <- a tutaj próbujesz pomnożyć funkcję przez 2 -> stąd NaN

komentarz 4 września 2016 przez Kamil Naja Nałogowiec (27,330 p.)
Chodzi o przekazanie funkcji, jako parametru drugiej funkcji i jej wywołanie.
1
komentarz 4 września 2016 przez niezalogowany

że tak?

function addition ( callback ) {
  var first = 1;
  var second = 2;
  var sum = first + second;
  
  callback( sum );
  return sum;
}
function multiplication ( arg ) {
  var multi2 = arg * 2;
  console.log(multi2); 
}

addition( multiplication );

 

Podobne pytania

0 głosów
1 odpowiedź 141 wizyt
0 głosów
2 odpowiedzi 3,230 wizyt
0 głosów
1 odpowiedź 596 wizyt
pytanie zadane 20 listopada 2016 w C i C++ przez Jaroslaw Goc Nowicjusz (120 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...