Se eseguo la funzione di prova nel seguente frammento di codice:Strano comportamento in funzione Javascript
function pointInside(r, p) {
var result =
(p.x >= r.location.x - r.size.width * 0.5) &&
(p.x <= r.location.x + r.size.width * 0.5) &&
(p.y >= r.location.y - r.size.height * 0.5) &&
(p.y <= r.location.y + r.size.height * 0.5)
;
return result;
}
function test() {
var rect = {};
rect["location"] = { x:6, y:5 };
rect["size"] = { width:10, height:8 };
var p = { x:10, y:8 };
var inside = pointInside(rect, p);
console.log(inside ? "inside" : "outside");
}
allora il testo "dentro" viene scritto nella console. Grande. Ora, se cambio la funzione pointInside a questo:
function pointInside(r, p) {
return
(p.x >= r.location.x - r.size.width * 0.5) &&
(p.x <= r.location.x + r.size.width * 0.5) &&
(p.y >= r.location.y - r.size.height * 0.5) &&
(p.y <= r.location.y + r.size.height * 0.5)
;
}
poi quando chiamo la funzione di test "fuori" viene scritto nella console. In seguito a ulteriori indagini, la funzione pointInside sta effettivamente tornando indefinita. Perché? Non riesco a vedere alcuna differenza significativa tra le due versioni di pointInside. Qualcuno può spiegarmi questo?
Anche se non sono d'accordo con molti dettagli, la sensazione generale è precisa: https://www.youtube.com/watch?v=D5xh0ZIEUOE –
Questo fa parte delle specifiche, non è qualcosa che "molti interpreti cercano di fare", è qualcosa che * tutti * gli interpreti * devono * fare. –
Forse devono, ma come spesso accade la realtà e gli standard non sempre si intersecano. Al momento sto usando tiny-js, un interprete incorporato per microcontrollori. Ci ritorno attende un punto e virgola, quindi non è conforme agli standard in questo senso. Non trattare con regole strane potrebbe non essere conforme, ma mantiene il codice piccolo e facile da convalidare per problemi di sicurezza. –