• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

javascript (canvas) szybka odpowiedź

Object Storage Arubacloud
0 głosów
132 wizyt
pytanie zadane 5 kwietnia 2019 w JavaScript przez program naczelny Gaduła (3,320 p.)

Witam!

Natrafiłem na dziwną sprawę natury technicznej javascriptu, kod przekaże najlepiej co mam na myśli: 

setTimeout('ctx.clearRect(0,0,canvas.width,canvas.height)', 500);

W przypadku powyżej kod działa poprawnie, funkcja wykonuje się po połowie sekundy. Natomiast kiedy cudzysłowy usunę:

setTimeout(ctx.clearRect(0,0,canvas.width,canvas.height), 500);

Ekran czyści się natychmiast. Czy ta funkcja bez cudzysłowów się w ogóle wykonuje? Komunikatu o błędzie nie ma. 

 

2 odpowiedzi

+1 głos
odpowiedź 6 kwietnia 2019 przez Comandeer Guru (601,110 p.)

Jeśli w JS użyjesz zapisu nazwaFunkcji(), to JS od razu wykona tę funkcję (bo to oznaczają nawiasy). Dlatego drugi zapis jest tak naprawdę równoważny takiemu:

var result = ctx.clearRect( 0, 0, canvas.width, canvas.height );
setTimeout( result, 500 );

Musiałbyś otoczyć to wywołanie w tzw. funkcję anonimową i to ją przekazać:

setTimeout( function() {
    ctx.clearRect( 0, 0, canvas.width, canvas.height );
}, 500 );
0 głosów
odpowiedź 5 kwietnia 2019 przez Chess Szeryf (76,710 p.)
edycja 5 kwietnia 2019 przez Chess
var timeoutID = scope.setTimeout(function[, delay, param1, param2, ...]);
var timeoutID = scope.setTimeout(function[, delay]);
var timeoutID = scope.setTimeout(code[, delay]);

function

function to be executed after the timer expires.

code

An alternative syntax that allows you to include a string instead of a function, which is compiled and executed when the timer expires. This syntax is not recommended for the same reasons that make using eval() a security risk.

https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval

https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html <-- Poczytaj, aktualizacja dzisiejsza (05/04/2019).

The effect of these options ensures that the string compilation done by setTimeout() and setInterval() behaves equivalently to that done by eval(). That is, module script fetches via import() will behave the same in both contexts.

setTimeout ma trzy dopuszczalne składnie. Trzecia składnia, to ta z użyciem apostrofów lub cudzysłowów, ponieważ ten parametr może być przekazany w trzecim syntax jako typ string.

Ogólnie, jeśli chodzi o tę trzecią składnię i to co pisze w dokumentacji, to jest to niezalecana praktyka z powodów bezpieczeństwa chodzi tutaj o eval, nie powinno się z tego korzystać w ogóle, chyba że w uzasadnionych przypadkach. Najlepiej pokodować trochę niskopoziomowo, żeby konkretnie wiedzieć dlaczego nie powinno się z tego korzystać, a nie tak wierzyć na słowo.

Żeby tego eval nie uruchamiać, opakuj kod w funkcję i powinno być OK.

Podobne pytania

0 głosów
2 odpowiedzi 699 wizyt
pytanie zadane 24 czerwca 2018 w JavaScript przez Req2030 Nowicjusz (150 p.)
+1 głos
1 odpowiedź 137 wizyt
0 głosów
1 odpowiedź 210 wizyt
pytanie zadane 23 listopada 2019 w JavaScript przez Młody programista Obywatel (1,200 p.)

92,573 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...