Autor Zpráva
Snipo
Profil
Čaute, tak začínam s javascriptom a už ma z neho rozbolela hlava... Čítal som si o funkciách a tak som si povedal že si jednu jednoduchú vytvorím nech viem ako to funguje.

function sucet() {
    var argumentsLength = arguments.length,
        sum = 0;

    if(argumentsLength == 0) {
        console.log('empty array');
        return false;
    } else {
        for(var i=0; i<=argumentsLength; i++) {
            if(typeof arguments[i] != 'number') {
                console.log('number error');
                return false;
            } else {
                sum += arguments[i];
            }
        }

        return sum;
    }
}

console.log(sucet(1)); // vypíše number error a false

Problém je že funkcia vždy vráti false a "number error" aj keď nemá. Do konzoly ho vypíše iba raz takže to skončí už pri prvom priebehu cyklu. Skúšal som si ten typeof uložiť aj vedľa do premennej, no taktiež to nefungovalo. Pritom keď si podobný if urobím niekde von z funkcie a otestujem to, všetko funguje ako má. Toto mi hlava nebere...
Monkeys
Profil *
Snipo:
// vypíše number error a false


Myslim ze preto lebo nemas definovane ako pole.
skusil by som neako takto.

var pole = [1,2,3,4,5];
console.log(sucet(pole));

function sucet(arguments) {
    var argumentsLength = arguments.length,
        sum = 0;
...
}

M.
Chamurappi
Profil
Reaguji na Snipa:
Do konzoly ho vypíše iba raz takže to skončí už pri prvom priebehu cyklu.
Ne, při druhém. Při prvním průběhu se sum zvětší o jedničku, protože typeof arguments[0] je "number". Při druhém se zjistí, že typeof arguments[1] je "undefined".
Ten druhý průběh asi nechceš, protože v arguments[arguments.length] je undefined vždy.


Reaguji na Monkeyse:
Zřejmě ti uniká, že arguments je speciální něco-jako-pole, které automaticky vzniká ve funkci a obsahuje všechny argumenty.
Keeehi
Profil
Snipo:
Do konzoly ho vypíše iba raz takže to skončí už pri prvom priebehu cyklu.
To je špatná úvaha. Vypíše se to jen jednou, protože za tím máš hned retirn false. Takže i kdybys měl více špatných argumentů tak se to vypíše jen jednou.

Jinak ten problém o terém píše Chamurappi je v podmínce cyklu. Správně to má být
for(var i=0; i<argumentsLength; i++) 
Snipo
Profil
Aha, takže zase moja nepozornosť, ďakujem.

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: