Autor Zpráva
Lorin
Profil *
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
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 *
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
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
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 *
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 *
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
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 *
Takže takhle funkce použít nejde?
Witiko
Profil
Lorin:
Můžeš danou funkci okamžitě vyvolat:
var proměnná = (function() {return 5;})();
Do proměnné pak bude přiřazena návratová hodnota. Používá se to i když člověk potřebuje uzávěru pro určitou hodnotu proměnné (například v cyklech):
var a = 1,
    b = (function(a) {
      return function() {alert(a)};
    })(a);
a = 2;
b(); // Vypíše 1
Každopádně v konkrétně Tebou uváděném případě nevidím důvod, proč používat funkci, viz. [#8] Radek9.
Radek9
Profil
Lorin:
Jde (jak psal Witiko), ale nemá to smysl.
Lorin
Profil *
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.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0