Autor | Zpráva | ||
---|---|---|---|
_es Profil |
#1 · Zasláno: 7. 1. 2009, 04:53:30
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 |
#2 · Zasláno: 7. 1. 2009, 08:42:13
Reaguji na _es:
Stačí použít lexikální uzávěr: (function(){ var n = 0; function id(){return n++;} })() |
||
_es Profil |
#3 · Zasláno: 7. 1. 2009, 10:08:11 · Upravil/a: _es
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 |
#4 · Zasláno: 7. 1. 2009, 10:13:13 · Upravil/a: Chamurappi
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 |
#5 · Zasláno: 7. 1. 2009, 10:22:11
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 |
#6 · Zasláno: 7. 1. 2009, 19:10:19
Tak pre zaujímavosť ešte to druhé riešenie, čo ma napadlo:
with({n:0})var id=function(){return n++;}; |
||
Časová prodleva: 15 let
|
0