Autor | Zpráva | ||
---|---|---|---|
ybznek Profil |
#1 · Zasláno: 4. 2. 2008, 15:14:47
<body> <script> var i=1 styl(); function styl(){ if (i<100){ i+=5; document.getElementById('popis').style.backgroundColor='blue'; if (i>100)i=100; document.getElementById('popis').style.width=i+"%"; document.getElementById('popis').style.height=i+"%"; if (i<100) setTimeout("styl()",1); }} </script> </head> <body> <span style="position:absolute; left:0; top:0;" id="popis">a</span> </body> Ahoj tento kód jsem zkoušel nějak napsat dobře a nešlo mi to to. Chtěl bych vás poprosit o to, abyste mi našli chybu. Bude to něco s tím document.getElementById('popis'). |
||
Joker Profil |
#2 · Zasláno: 4. 2. 2008, 15:17:37 · Upravil/a: Joker
Prvek "popis" v okamžiku vykonávání skriptu neexistuje.
edit: Druhá věc, že ani samotná funkce styl() v okamžiku svého volání (ještě) neexistuje. |
||
Chamurappi Profil |
#3 · Zasláno: 4. 2. 2008, 15:38:59
Reaguji na Jokera:
„ani samotná funkce styl() v okamžiku svého volání (ještě) neexistuje“ Je to sice zvláštní, ale existuje. Viz mé srpnové zjištění. |
||
ybznek Profil |
#4 · Zasláno: 4. 2. 2008, 15:48:46
Joker
Jo díky. Hledal jsem chybu v něčem jiném :-( |
||
los Profil * |
#5 · Zasláno: 4. 2. 2008, 16:55:50
> Je to sice zvláštní, ale existuje.
Zvláštne by bolo, keby neexistovala. |
||
peta Profil |
#6 · Zasláno: 5. 2. 2008, 07:59:48
los
Mno, mne to prijde zvlastni, ze existuje. Protoze kdyz das script pred element, tak vypise chybu, ze element neexistuje. Nezkousel jsem to, mozna se bude chovat jiny prohlizec k takove konstrukci jinak. V IE bych pocital s existenci. |
||
Joker Profil |
#7 · Zasláno: 5. 2. 2008, 09:26:22
los
Zvláštne by bolo, keby neexistovala. Mně teda přijde hodně zvláštní její existence, neexistence by mi přišla normální. Alespoň jsem měl za to, že skript se vykonává sekvenčně. Zdá se, že to tak úplně není. |
||
centi Profil |
#8 · Zasláno: 5. 2. 2008, 10:00:04
Skript (jeden <script> blok, alebo jeden <script src=""> súbor) sa vykonáva dvoj-krokovo.
V prvom kroku si browser načíta všetky deklarované funkcie do pamäte, a až v druhom kroku vykonáva postupne inštrukcie uvedené v skripte. V druhom kroku už teda sú funkcie dostupné, bez ohľadu na to, kde v danom script bloku boli definované. Toto neplatí v prípade, že máme funkcie definované týmto spôsobom: var fn = function() { ... }; |
||
los Profil * |
#9 · Zasláno: 5. 2. 2008, 15:38:49
Na to, či je povolené používať funkciu, ktorá predtým nebola deklarovaná, neexistuje univerzálne pravidlo, ale je to definované v špecifikácii jazyka.
Keď sa v JavaScripte použije pomenovaná funkcia, je to ako keby sa deklarovala nová lokálna premenná s jej názvom (až na to, že to nie je premenná, ale funkcia). Rozsah platnosti premennej je daný funkciou, v ktorej je deklarovaná (prípadne globálnym objektom, ak nie je tá premenná deklarovaná v žiadnej funkcii). Takže keď deklarujeme funkciu neskôr, ale stále v rámci aktuálneho rozsahu platnosti, tak ju môžeme používať. Ak by to bolo tak, že premenná platí až po jej deklarovaní, tak by volanie funkcie "a" v nasledujúcom príklade vypísalo 3. Keďže je ale rozsah platnosti definovaný trochu inak, tak aj výsledok je trochu iný: var i = 3; function a() { alert(i); var i; } |
||
Chamurappi Profil |
#10 · Zasláno: 5. 2. 2008, 15:54:15
Reaguji na losa a centi:
Jasně, takhle to být musí, ale stejně mi to připadá zvláštní. Teď se zkuste mrknout na můj oblíbený oříšek s with. |
||
Časová prodleva: 16 let
|
0