Avatar
pcrewik
Člen
Avatar
pcrewik:

Ahojte,

functionTwo(2, functionOne, function(x) { alert(x+2); });

viete mi pls. vysvetlit odkial presne sa naplna hodnota x pre anonymnu funkciu "function(x) " v callbacku?

Dakujem

 
Odpovědět 27. října 10:56
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na pcrewik
Taskkill:

Předpokládám, že funkce 'functionTwo' zavolá svůj třetí argument pomocí kulatých závorek () a předá ji nějakou hodnotu, možná právě svůj první argument... Takže hodnota x se dostane do funkce až při a podle volání funkce.

 
Nahoru Odpovědět 27. října 11:39
Avatar
pcrewik
Člen
Avatar
Odpovídá na Taskkill
pcrewik:

niekto kto by vedel potvrdit co pise taskkill?

 
Nahoru Odpovědět 28. října 9:57
Avatar
David Hynek
Redaktor
Avatar
Odpovídá na pcrewik
David Hynek:

Tak se koukni sem... https://www.dashingd3js.com/…ck-functions

Je to tam celé rozebrané do posledního puntíku...

Nahoru Odpovědět  +1 28. října 11:35
Čím víc vím, tím víc věcí nevím.
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na pcrewik
Taskkill:

Třeba můj skill v jsku? Nebo fakt, že tu o jsku mám pár článků. Nebudu ti říkat něco co není 100% tak jak říkám.

 
Nahoru Odpovědět 28. října 20:18
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Taskkill
Taskkill:

Upresnim svuj prispevek, potvrdit chces co? Ze to takhle skutecne v JS jde? Na to jsou tu clanky, na to nemusis nutne verit me. Ja jsem odpovidal na to, co asi dela kod z ukazky. To ti nikdo krome autora kodu nepotvrdi.

 
Nahoru Odpovědět 28. října 20:31
Avatar
David Hynek
Redaktor
Avatar
Odpovídá na Taskkill
David Hynek:

konkrétně přesně tuhle funkci řeší můj odkaz... krok po kroku...

Nahoru Odpovědět 28. října 20:45
Čím víc vím, tím víc věcí nevím.
Avatar
Filip Šedivý:

Při vytvoření funkce, vložíš jen další argument, který zavoláš pouze s závorky. A je jen na tobě jestli bude funkce veřejná nebo anonymní. V obou případech se to chová uvnitř vytvářené funkce stejně.

// Námi vytvořená funkce
function mojeFunkce(callback){

        // Uvnitř jej zavolám jako název proměnné, akorát je obalím kulatými závorky, kvůli tomu že vlastně je to funkce. A uvnitř již předávám parametry
        return callback("pokus");
}

// Vytvořím se nějakou externí funkce
function externi(vstup){
        alert(vstup);
}

// A teď mojí funkci zavolám pomocí veřejné funkce
// Pozor, při vkládání funkce se vloží jen název bez kulatých závorek, neboť předávání argumentů proběhne až uvnitř, při volání callbacku
mojeFunkce(externi);

// A teď to samé akorát s anonymní funkcí
// Proměnná vstup co je uvnitř, se předá uvnitř mojeFunkce, to je přesně to co se skrývá v závorkách. Tak že hodnota pokus předaná v callbacku se uloží nyní do proměnné vstup.
mojeFunkce(function(vstup){
        alert(vstup);
});
Nahoru Odpovědět  +1 28. října 21:10
Láska je, když si zapamatujete její IP, abyste obešli zpoždění DNS.
Avatar
pcrewik
Člen
Avatar
Odpovídá na Filip Šedivý
pcrewik:

Filip, vieš mi pls. vysvetliť prečo keď funkcia "externi" ocakava argument "vstup", tak pri volani z mojeFunkce(ex­terni); sa tej funkcii externi pri volaní dá co za hodnotu pre argument "vstup"

ďakujem, tvoj popis mi najviac ozrejmil vec ;-)

 
Nahoru Odpovědět 28. října 21:35
Avatar
Filip Šedivý:

Funkce externí samozřejmě nemusí očekávat žádný vstup, to potom záleží hodně na tom co callback předává (pokud něco vůbec předává) a nebo jestli ty s tím vstupním argumentem chceš pracovat.

Pěkným příkladem je třeba na funkce na eventy - tedy document.addE­ventListener();

Pokud nepotřebuješ cyklit nebo vytvářet více událostí, tak nepotřebuješ pracovat s callbackem

// Načtení objektu s ID = test
var object = document.querySelector("#test");

// A vytvoření události na kliknutí
object.addEventListener("click", function(){
        alert("Klikl si na #test");
});

V případě že bychom addEventListener dávali do cyklu, tak použijeme ve funkci parametr který nám funkce addEventListener předá do anonymní funkce.

// Výběr všech prvků s třídou test
var object = document.querySelectorAll(".test");

// A následný cyklus
for(var i = 0; i < object.length; i++){
        var trida = object[i];
        trida.addEventListener("click", function(event){
                var e = event.target;

                // Při kliknutí změníme HTML kód
                e.innerHTML = "Test";

                /*
                Nemůžeme přistoupit přes object[i].innerHTML,
                neboť v tomto případě hraje roli zapouzdření funkce,
                a proto nám addEventListener vrací parametr,
                tedy objekt který který je shodný s object[i]
                */
        });
}

Stačí takhle? Nebo jsem úplně mimo mísu? :D

Editováno 28. října 21:47
Nahoru Odpovědět  +1 28. října 21:47
Láska je, když si zapamatujete její IP, abyste obešli zpoždění DNS.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.