Autor Zpráva
marq
Profil *
ahoj je rozdíl mezi
var mojefunkce = function() { ... }
a mezi
function mojefunkce() { ... }

a další věc:
napsal jsem toto
var fce = (function() {
 var id = 15;
 var vraceni = function() {
  return id;
 }

 return { vratitID = vraceni }
}());
je to samospouštěcí funkce a když potom dále v kodu napíšu fce.vratitID() tak to jde v pohodě,
ale když to napíšu tak aby se ta funkce sama NEspustila, ale spouštím jí až potom tj.
var fce = function() {
 var id = 15;
 var vraceni = function() {
  return id;
 }

 return { vratitID = vraceni }
}
fce(); 
a napíšu: fce.vratitID(); tak mi to napíše že to není funkce, proč?
Kajman
Profil
K druhému dotazu. Je rozdíl do proměnné dát výsledek zavolání funkce, která vrací funkci (první verze) a dát do proměné funkci, která teprve svým zavoláním tu funkci vrací. Pokud chcete zavolat funkci v proměnné, musíte za ní dát kulaté závorky.


var fce = (function() {
        var id = 15;
        var vraceni = function() {
            return id;
        }
        
        return { vratitID : vraceni() }
}());
alert(fce.vratitID);

var fce = (function() {
        var id = 15;
        var vraceni = function() {
            return id;
        }
        
        return { vratitID : vraceni }
}());
alert(fce.vratitID());


var fce = function() {
    var id = 15;
    var vraceni = function() {
        return id;
    }
    
    return { vratitID : vraceni };
}
alert(fce().vratitID());

var fce = function() {
    var id = 15;
    var vraceni = function() {
        return id;
    }
    
    return { vratitID : vraceni() };
}
alert(fce().vratitID);
Kajman
Profil
Zkuste si projít tyto příklady
johnresig.com/apps/learn
marq
Profil *
Kajman:
díky, trochu sem to prozkoušel a
var fce = (function() {
        var id = 15;
        var cislo = 19;
        var vraceni = function() {
            return id;
        }
        var soucet = function() {
            return id + cislo;
        }

        var zmena = function() {
            id -= 1;
        }


        return { vratitID : vraceni, secti : soucet, zmenit: zmena }
}());
console.log(fce.vratitID()); 
fce.zmenit();
console.log(fce.vratitID());
tady se vypíše 15 a po změně 14


a tady při tom
var fce = function() {
    var id = 15;
    var cislo = 19;
    var vraceni = function() {
        return id;
    }

    var soucet = function() {
            return id + cislo;
        }

    var zmena = function() {
            id = 13;
        }


    return { vratitID : vraceni, secti : soucet, zmenit : zmena  };
}
console.log(fce().vratitID());
fce().zmenit();
console.log(fce().vratitID());
se vypíše 15 a 15, tj. když volám tu funkci tak se znovu vytváří proměnnou kde ji přiřazuje hodnotu 15? kdežto v tom prvním případě pracuji s tou proměnnou co vytvořila když sem jí spustil a vrátil té proměnné (tj. ta funkce vytvořila proměnnou id jen jednou v životě)? chápu to dobře?
Kajman
Profil
V první verzi si vrátíte objekt s metodami. V druhé verzi pokaždé vytváříte objekt nový.

Abyste nevytvářel v druhé verzi stále nový objekt, uložte si ho.
var mujObjekt=fce();
mujObjekt.vratitID();
mujObjekt.zmenit();
mujObjekt.vratitID();
Nezávislých objektů si při tomto přístupu můžete udělat více.
marq
Profil *
co se týká toho odkazu... tu funkci assert mám nahradit console.log?
Kajman
Profil
Z toho odkazu nic nemusíte nikam kopírovat. Je tam tlačítko run a to assert vykoná a vypíše. Kód si můžete upravovat po dvojkliku - někdy to je potřeba ke splnění úkolu.
marq
Profil *
uf, zítra se na to budu muset ještě jednou asi pořádně podívat a projít ty příklady v odkazu... a co se týká té úplně první otázky?

ahoj je rozdíl mezi
var mojefunkce = function() { ... }
a mezi
function mojefunkce() { ... }
Kajman
Profil
Ano rozdíl tam je, viz výsledek tlačítka run na páté stránce
johnresig.com/apps/learn/#5
ale důsledky rozdílu nechám na někom jiném, kdo se v js vyzná.

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: