Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Prośba o wytłumaczenie elementów skryptu
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
marlowe
Witam,
bawię się właśnie JsHacker 1.0 :) ale niestety JavaScript znam tylko "z widzenia" i mam problem z trzecim etapem. Kod wygląda tak:
Kod
<script type="text/javascript" language="JavaScript">
<!--

  function rome(N,s,R,b,a,o) {
    R='IVXLCDM'.split(s=''),b=0,a=2;
    while(N) {
      o=N%(a=7-a);
      N=N/a^0;
      while(o)
        s=R[o-->3?b+N%2+(N&=~1,o=1):b]+s;
      b++;
    }
    return s;
  }

  function check_passwd(v) {                                                                                                                                                                                                                           with(top)
    rome(v) == MCMXXXIX ? location.href = 'p4_'+v+'.html' : alert('Hasło niepoprawne !!!   ');
    return false;
  }

//-->
</script>

Oczywiście wywoływany jest poprzez:
  1. <form onSubmit="return check_passwd(passwd.value)">
  2. Podaj hasło: <input type="password" name="passwd" size="8">
  3.  
  4. <input type="submit" value="Ok">
  5. </form>

Rzecz jasna, nie chcę prosić o podanie wyniku ;) tylko o wytłumaczenie paru elementów bym mógł sobie dalej kombinować:
  1. czy dobrze się domyślam, że wywołanie funkcji, która w definicji ma kilka parametrów, z jednym z parametrem, powoduje, że parametr ten odczytywany jest jako pierwszy z listy parametrów z definicji, a pozostałe są puste (tj, że wywołanie rome(v) wykona funkcję z parametrem N == v);
  2. czy pierwsza linia funkcji rome() oznacza, że najpierw jest wywoływana instrukcja split dla 'IVXLCDM' z parametrem s='' , której wynik jest zapisywany w R (co w praktyce, jak rozumiem, oznacza zapisanie w kolejnych rekordach tablicy R ciągów zawierających kolejne znaki I, V, X, ...) natomiast b=0,a=2 to po prostu ustalenie wartości tych zmiennych?
  3. jedna z instrukcji to N=N/a^0 - z informacji w książce, którą mam wynika, że najpierw wykonuje się operację dzielenia; chciałem się natomiast dowiedzieć czy słusznie mi się wydaje, że XOR z 0 może dawać co najwyżej... 0?
  4. co oznacza zapis R[o-->...] ?- mam oczywiście na myśli "strzałkę";
  5. co oznacza with(top) w funckji check_passwd()?
Z góry dziękuję za odpowiedzi.
Pozdrawiam.
Bartek
Paul
1. Tak

2. Tak

3. Tak, dzielenie jest pierwsze, mozna sobie to spawdzic porownujac wyniki przy dwoch ustawieniach nawiasow - N=(N/a)^0; i N=N/(a^0); - co ciekawe IE sie przy tym drugim wiesza smile.gif Zauwaz tez, ze o jest rowne na zmiane 1,0,1,0,a a jest rowne na zmiane 5,2,5,2 przy przechodzeniu przez petle...

4. Nie wypowiem sie, bo nie wiem, ale wyglada szpanersko (poszukam czegos o tym - jak znajde to napisze) winksmiley.jpg

5. Chodzi oto, ze uzywa to zmiennej z obiektu top. Mozna to uzywac np. with(Math) i wtedy nie musisz pisac Math.round() tylko round().


PS. Jak otworzysz glowna ramke... Cos przypomina rzymskie cyfry... sprawdz to.... Mala podpowiedz winksmiley.jpg

PS2. Na te cyfry naprowadzilo mnie to, ze w 18 linii N musi byc liczba bo inaczej wyjdzie NaN....
marlowe
@Paul: bardzo dziękuję, już byłem pewien, że nikt nie odnajdzie tego posta w czeluściach forum ;-) Dzięki za odpowiedzi. Tak- też myślałem nad tą rzymską liczbą w głownej ramce ;-) Daj proszę znać jakbyś rozszyfrował ten zapis "-->".
Pozdrawiam.
Bartek
Paul
Szukalem troche, ale nie udalo mi sie znalezc.... Dlatego postanowailem zaeksperymenowac smile.gif

Oto wyniiki eksperymentu smile.gif

Kod
o = 2;

//s=o-->50; // false

//s=o--<50; // true

// s=o++==o++; // false

//s = o -- < 2; // false - ze spacjami tez dziala :)

//s=o--<=1; // false, a niby 1 <= 1 wiec powinno dac true;

s=o--==2; // true, a 1 == 2 wiec powinno dac false;


alert(s);
alert(o);



No i wyszlo mi na to, ze nie jest to stricte strzalka, ale jakas hybryda kilku innych operatorow skoro dziala i ze spacjami smile.gif Z poczatku myslalem, ze to zmiejsza wartosc zmiennej a potem porownuje... No ale, doszedlem do wniosku, ze to porownuje nie zmniejszone, a dopiero potem zmniejsza... smile.gif

Dobrze by bylo akby ktos mogl specyzowac to zagadnienie bo to co ja napisalem to tylko takie moje przypuszczenia smile.gif
marlowe
Ja mam trzy refleksje na temat tej strzałki:
- o dziwo taka strzałka powoduje zakończenie komentarza HTML! Nawet jeśli nie ma przerw po bokach, to takie coś powoduje, że w przeglądarkach bez js pokaże się treść skryptu po tej strzałce (brak przerw po bokach strzałki nie ma tu znaczenia);
- dziwnie się zachowuje to wyrażenie- teoretycznie tak jak dekrementacja a potem porównanie ale z przykładu, który napisałem wynika, że jest to porównanie, nie wiadomo dlaczego, większe/mniejsze lub równe;
- zastanawiam się czy nie ma to związku może z wyrażeniem "dąży do" chociaż pojęcia nie mam co by to miało oznaczać w praktyce...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.