var test = function test(a) { … }
V sekci o funkcích je podobný kus kódu, správně ale nejspíš má být takhle (?): var test = function (a) { … }
Vlákno názorů k článku
Javascript a oblast působnosti proměnných - díl první
Re: funkce
I tento zápis je správný. V prvním případě, se do proměnné test přiřazuje pojmenovaná funkce, v druhém případě funkce anonymní. Výhodou prvního případu je, že se v některých debugovacích nástrojích mnohem lépe orientuje v call stacku.
Re: funkce
Souhlas, zápis var test = function test(a) { … } má trošku jiný význam a není moc doporučeníhodný. Viz perfektní rozbor na toto téma: http://yura.thinkweb2.com/named-function-expressions/
Re: funkce
Specifikace říká, že pokud použiji výraz function identifikator(){ … }, tak identifikator bude dostupný pouze uvnitř této fce. (třeba pro potřeby rekurze). Takže následující kód způsobí chybu (IE toto nerespektuje).
var verejny_nazev = function soukromy_nazev(){ … };
soukromy_nazev(); // Chyba
Nemyslím si, že by toto použitelné v praxy (navíc, když v IE to nefunguje). Zmiňuji to kuli uvedenému zápisu var test = function test(a) { … }. Pokud bych později potřeboval přejmenovat tuto fci. a jméno změnil jen na jednom místě, můžu se dostat do problémů.
PS: toto uvádí i článek, který zmiňuje Karel Fučík. Ono těch zájímavostí/záludností ohledně deklarace funkce je víc, takže pokud vás to zaujalo, přečtěte si ho.
Re: funkce
Je to hlavně kvůli tomu, co níže poznamenává Adam Hořčica. Pokud je funkce anonymní, tak na sebe zevnitř nemůže odkazovat a nelze např. pracovat s rekurzí. A použít jiné veřejné a jiné privátní jméno zase můžýe sestřelit některé hloupější prohlížeče, takže se to moc nedoporučuje. Proto píšu, že ekvivalentní jsou právě tyhle dva zápisy, jsou si co do funkce a významu asi nejblíž.
Re: funkce
Anonymní funkce na sebe může odkazovat pomocí arguments.callee. Tím je možná i rekurze.
Re: funkce
Pochopitelně, ale každý jistě poznal, že mluvím o referenci přes název. Používání function.callee (nebo call či apply nebo práce s polem arguments) je poněkud pokročilejší a nemůžete to přeci chtít po začátečníkovi nebo mírně pokročilém, kterému je tento článek určen.
Re: funkce
Ani na okamžik jsem nepochyboval, že by Petr Staníček neznal arguments.callee. Ovšem jako začátečník bych si z věty „Pokud je funkce anonymní, tak na sebe zevnitř nemůže odkazovat a nelze např. pracovat s rekurzí.“, ať už byla myšlena v jakémkoli kontextu, nejspíš odnesl zcela jednoznačný a zcela mylný závěr. Proto moje poznámka (nebyla myšlena jako rejpání).
Re: funkce
Díky za odpověď, pixy, šlo mi jen o to, zda ses neupsal. Přiřazovat pojmenovanou funkci proměnné téhož jména není totiž v praxi příliš běžné, proto jsem se nad tím pozastavil. Nicméně rekurze v anonymních funkcích nepředstavuje problém (arguments.callee).
Re: funkce
Pardon, nepřečetl jsem si příspěvek Karla Fučíka nade mnou.