Autor Zpráva
_es
Profil
Dá sa v JavaScripte nejako použiť statická premenná vo funkcii?
Niečo ako:
id.n = 0;
function id(){return id.n++;}

no aby nebolo treba použiť objekt a aby nebola premenná globálna.
Teda aby namiesto id.n++ stačilo použiť n++ ?
Chamurappi
Profil
Reaguji na _es:
Stačí použít lexikální uzávěr:
(function(){
  var n = 0;
  function id(){return n++;}
})()
_es
Profil
Chamurappi
Stačí použít lexikální uzávěr:
Ale to predsa nebude funkčné, tá anonymná funkcia vracia undefined, čiže výsledkom toho celého je undefined
a ani id sa nestane premennou - funkciou, ale hneď zanikne spolu s tou anonymnou funkciou.
No už som nad tým rozmýšľal a tiež ma napadla vnorená funkcia, no malo by to byť asi nejako takto:
var id = function(){var n = 0; return function(){return n++;};}();

No napadlo ma ešte jedno odlišné riešenie bez vnorenia funkcií, no dám ho tu až neskôr,
zatiaľ to môže byť ako riešiteľská úloha, možno to tu tiež niekoho napadne, alebo vymyslí iné riešenie.
Chamurappi
Profil
Reaguji na _es:
Jestli potřebuješ mít funkci „id“ přístupnou i zvenčí, tak:
var id;
(function(){
  var n = 0;
  id = function(){return n++;}
})()

tá anonymná funkcia vracia undefined, čiže výsledkom toho celého je undefined
To je v pořádku, o výsledek onoho obalu nejde.
_es
Profil
Chamurappi
Áno, po doplnení var id; je ten tvoj kód už funčný, pre globálne id .
Mal som asi na začiatku upresniť, že to má byť globálna funkcia.
No som zvedavý, či niekto príde na odlišné riešenie bez vnorenia funkcií.
_es
Profil
Tak pre zaujímavosť ešte to druhé riešenie, čo ma napadlo:
with({n:0})var id=function(){return n++;};

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:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: