¿Alguien ha utilizado esta estructura alguna vez para hacer una potencia de x?
Código PHP:
var x = 2;
// 2^5
x*=x*=x*=x*=x;
alert(x);
Bueno, el problema no es ese, que el resultado es predecible. La cosa viene cuando metemos dos variables en ese tipo de sentencia. Me gustaría que probaseis este código:
Código PHP:
// escribir en el documento una ristra (x)html fuera de tiempo de ejecución.
function e(q,sinBR) {
var elDIV = document.createElement("DIV");
if(q==undefined) q="";
if(!sinBR) q+="<br/>";
elDIV.innerHTML = q;
for(var a=0; elDIV.childNodes.length>a; a++) {
document.body.appendChild( elDIV.childNodes[a].cloneNode(true) );
}
}
var x = 2;
var y = 5;
e("var x = "+ x);
e("var y = "+ y);
x*=x*=y*=x*=x;
e("var x = "+ x +" que es 2*2*5*2*2");
e("var y = "+ y +" que es 5*2*2" );
Cita:
Esto es un lío
Iniciado por output
var x = 2
var y = 4
var x = 80 que es 2*2*5*2*2
var y = 20 que es 5*2*2
var y = 4
var x = 80 que es 2*2*5*2*2
var y = 20 que es 5*2*2


x*=x*=y*=x*=x;
x(=2) lo multiplicamos por x(=2), pero ésta última x no es 2, es 5*2*2. Pero ese 5 no es 5 porque está multiplicado por 2*2..... bueno, un lío.
Lo que yo hago es multiplicar desde el final, dividiendo las sentencias (seguid el código de colores):
x*=x*=y*=x*=x;
He deducido que los valores originales no cambian durante la sentencia. Es decir, x siempre se sustituye por 2 e y siempre se sustituye por 5 (aunque tal vez me equivoque). La más fácil de entender es la y. Cogemos la parte final de la sentencia y tenemos que y*=(x*x) (y = 5*2*2 = 20). Ningún problema aparentemente.
Ahora vamos por la x:
x = x * 2; // vamos x=4
x = x * 5; // vamos x=20
x = x * 2; // vamos x=40
Si lo hemos hecho bien -creo que sí- nos hemos quedado al final con que x=40, y lo que nos imprime es x=80.
La pregunta es: ¿Qué procedimiento sigue el motor de javascript para decirnos que x=80? ¿Como se puede desglosar esa sentencia x*=x*=y*=x*=x en sentencias más simples como he intentado yo?
Cada día me sorprende más este lenguaje
