Autor | Zpráva | ||
---|---|---|---|
Lorin Profil * |
#1 · Zasláno: 30. 10. 2011, 13:29:36
Dobrý den. Mám malý problém. Začal jsem se učit JavaScript a proto zkouším všechno možné i nemožné a narazil jsem při tom na jeden problém.
Při vytváření pole jsem chtěl využít anonymních funkcí: var pole = []; pole[0] = function (){ return 5; }; Tento příklad je triviální a použití funkce není potřeba, ale pro ukázku stačí. Když si později chci vypsat obsah pole: document.write(pole[0]) výsledkem je, že se zobrazí tělo funkce tedy: function(){ return 5; } a ne kýžené číslo 5. Zkoušel jsem použít i var pole = new Array(function (){ return 5; }); ale výsledek je stejný. Jde takto využívat anonymní funkce nebo dělám něco špatně? |
||
Radek9 Profil |
#2 · Zasláno: 30. 10. 2011, 13:42:34 · Upravil/a: Radek9
Lorin:
Nechápu, k čemu by to mělo sloužit. Ukládáš do pole funkci. Potom ji ale nevoláš, nýbrž se ji snažíš vypsat jako string. Pokud chceš do pole uložit pětku, tak ji tam prostě ulož: pole[0] = 5; |
||
Lorin Profil * |
#3 · Zasláno: 30. 10. 2011, 14:08:42
Pokud ale do pole budu chtít uložit hodnotu, kterou musím před uložením ještě nějak zpracovat, bude použití funkce potřeba. A vytvářet pro každou buňku pole novou pojmenovanou funkci mi přijde jako blbost.
|
||
Radek9 Profil |
#4 · Zasláno: 30. 10. 2011, 14:13:03 · Upravil/a: Radek9
Lorin:
Ale do toho pole přece musíš ukládat výsledek té funkce, ne samotnou funkci: var pole = [], func; func = function(){ return 5; } pole[0] = func();//Uloží do pole 5 |
||
Nox Profil |
#5 · Zasláno: 30. 10. 2011, 14:24:30
Lorin:
Tvůj příklad by šel zfunkčnit jako document.write(pole[0]()); Document.write se ale moc nedoporučuje, buď obsah vlož do nějakého existujícího elementu, nebo si nový vytvoř Radek9: „Ale do toho pole přece musíš ukládat výsledek té funkce, ne samotnou funkci:“ Nemusí, ale záleží o co jde... Lorin: Asi bude lepší když napíšeš konkrétně co potřebuješ |
||
Lorin Profil * |
#6 · Zasláno: 30. 10. 2011, 15:11:09
Mám proměnnou obsahující HTML kód tabulky. Z ní pak chci do pole dostat některé hodnoty, abych s nimi mohl dále pracovat.
// Promenna tableInfo obsahuje HTML kod tabulky, kterou chci zpracovat. var infoArray = []; infoArray[0] = function() { var temp = tableInfo.rows[2].cells[1].innerText; temp = temp.substr(0, temp.search(" ")); return temp; }; Protože není možné použít tableInfo.rows[2].cells[1].innerText a search najednou (nebo nevím jak), chtěl jsem použít nepojmenovanou funkci, která by se provedla a vrátila hledanou hodnotu. Myslel jsem, že návratová hodnota se použije jako hodnota infoArray[0]. |
||
Lorin Profil * |
#7 · Zasláno: 30. 10. 2011, 15:12:58
Nox:
„Document.write se ale moc nedoporučuje, buď obsah vlož do nějakého existujícího elementu, nebo si nový vytvoř“ To vím, použil jsem to jen jako jednoduchý příklad, abych zbytečně neodbíhal od toho o co mi jde. |
||
Radek9 Profil |
#8 · Zasláno: 30. 10. 2011, 15:13:13
Lorin:
Na to vůbec není potřeba funkce: var infoArray = []; var temp = tableInfo.rows[2].cells[1].innerText; temp = temp.substr(0, temp.search(" ")); infoArray[0] = temp; |
||
Lorin Profil * |
#9 · Zasláno: 30. 10. 2011, 15:15:27
Takže takhle funkce použít nejde?
|
||
Witiko Profil |
#10 · Zasláno: 30. 10. 2011, 15:37:44 · Upravil/a: Witiko
Lorin:
Můžeš danou funkci okamžitě vyvolat: var proměnná = (function() {return 5;})(); var a = 1, b = (function(a) { return function() {alert(a)}; })(a); a = 2; b(); // Vypíše 1 |
||
Radek9 Profil |
#11 · Zasláno: 30. 10. 2011, 15:41:25
Lorin:
Jde (jak psal Witiko), ale nemá to smysl. |
||
Lorin Profil * |
#12 · Zasláno: 30. 10. 2011, 15:51:39
Witiko:
Každopádně v konkrétně Tebou uváděném případě nevidím důvod, proč používat funkci, viz. [#8] Radek9. Když už nic jiného, vypadá to líp :). Děkuji všem za rady. |
||
Časová prodleva: 12 let
|
0