Devel.cz Lupa Měšec Podnikatel Root Zdroják.cz DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Vlákno názorů k článku
Javascript a oblast působnosti proměnných - díl první

Dero
Dero (neregistrovaný) ---.cust.nbox.cz
7. 8. 2009 1:07

funkce

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) { … }

Aleš Roubíček
Aleš Roubíček (neregistrovaný) ---.47.broadband3.iol.cz
7. 8. 2009 6:09

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.

Karel Fučík aura:94
7. 8. 2009 8:31

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.thin­kweb2.com/named-function-expressions/

Adam Hořčica
7. 8. 2009 10:53

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.

Petr Staníček aura:83
7. 8. 2009 13:26

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íž.

Karel Fučík aura:94
7. 8. 2009 13:36

Re: funkce

Anonymní funkce na sebe může odkazovat pomocí arguments.callee. Tím je možná i rekurze.

Petr Staníček aura:83
7. 8. 2009 22:00

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.

Karel Fučík aura:94
7. 8. 2009 22:27

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í).

Petr Staníček aura:83
7. 8. 2009 22:42

Re: funkce

„… tak na sebe zevnitř nemůže odkazovat svým jménem…“

Dero
Dero (neregistrovaný) ---.cust.nbox.cz
7. 8. 2009 15:50

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).

Dero
Dero (neregistrovaný) ---.cust.nbox.cz
7. 8. 2009 15:51

Re: funkce

Pardon, nepřečetl jsem si příspěvek Karla Fučíka nade mnou.

Zasílat nově přidané příspěvky e-mailem