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í

Vít Šesták aura:72
7. 8. 2009 7:22

Poslední příklad: zvyšuje o jedničku?

Cituji poslední příklad:

function test() {
function plus(x) { return x++ }
alert( plus(1) );
} test(); alert( plus(1) );

Opravdu funkce plus zvyšuje hodnotu o jedničku? Zvyšuje to jen uvnitř (implementační detail), ale navenek je to úplně jedno: proměnná x není volána odkazem (to v JS asi ani nejde) a postfixový operátor vrací původní hodnotu konvertovanou na číslo.

Samozřejmě, poslední řádek způsobí chybu, s tím souhlasím.

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

Re: Poslední příklad: zvyšuje o jedničku?

Jistě, nechtěl jsem zabředávat do detailů, protože tady zrovna jde o něco jiného, nač je třeba se soustředit, takže jsem to nenapsal exaktně přesně. Funkce plus() zvýší (v tomto případě) o jedničku hodnotu své interní, lokální proměnné „x“ a vrátí její hodnotu (zápis return x++ je ekvivalentní zápisu  x = x+1; return x).

Ale s tím „voláním odkazem“ to tak jednoduché není, ne že to Javascript nemá – má to, ovšem probíhá to automaticky a programátor to nemá pod kontrolou. Zjednodušeně řečeno: skaláry se do funkcí v JS předávají hodnotou, objekty referencí.

Petr Staníček aura:83
7. 8. 2009 14:29

Re: Poslední příklad: zvyšuje o jedničku?

Selfpwn, pardon! Zápis return x++ NENÍ ekvivalentní zápisu x = x+1; return x, to by to muselo být return ++x. Omlouvám se, napříště se musím na komentáře více soustředit a číst to po sobě.

Vít Šesták aura:72
7. 8. 2009 16:06

Re: Poslední příklad: zvyšuje o jedničku?

No +1 místo ++ by tomu neubralo na srozumitelnosti, spíše naopak. Ad volání odkazem: ve chvíli, kdy do této proměnné něco přiřadím, není tím ovlivněno nic mimo funkci. Tomu neříkám volání odkazem. Je to vlastně stejně jako u Javy, ta taky nemá volání odkazem, i když můžu samozřejmě předat referenci na objekt.

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

Re: Poslední příklad: zvyšuje o jedničku?

Máte pravdu, prosté +1 je zde lepší a méně matoucí. Hlavně v tom kódu VŮBEC nejde o to, co ta funkce dělá, má jen demostrovat její samotnou existenci. Já tam plácnul prvním, co mě napadlo, a pak jsou z toho takováhle mrzení.

Požádal jsem redakci o opravu, místo return x++ by tam napříště mělo být jen return x+1. Děkuji za pochopení.

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