texto net modificar con change cambiar attribute asp javascript variables variable-assignment

javascript - net - title css



Múltiple asignación de la mano izquierda con JavaScript (6)

var var1 = 1, var2 = 1, var3 = 1;

Esto es equivalente a esto:

var var1 = var2 = var3 = 1;

Estoy bastante seguro de que este es el orden en que se definen las variables: var3, var2, var1, que sería equivalente a esto:

var var3 = 1, var2 = var3, var1 = var2;

¿Hay alguna manera de confirmar esto en JavaScript? ¿Es posible usar algún perfilador?


var var1 = 1, var2 = 1, var3 = 1;

En este caso, la palabra clave var es aplicable a las tres variables.

var var1 = 1, var2 = 1, var3 = 1;

que no es equivalente a esto:

var var1 = var2 = var3 = 1;

En este caso, detrás de las pantallas la palabra clave var solo se aplica a var1 debido a la elevación variable y el resto de la expresión se evalúa normalmente, de modo que las variables var2, var3 se vuelven globales

Javascript trata este código en este orden:

/* var 1 is local to the particular scope because of var keyword var2 and var3 will become globals because they''ve used without var keyword */ var var1; //only variable declarations will be hoisted. var1= var2= var3 = 1;


Actualmente,

var var1 = 1, var2 = 1, var3 = 1;

no es equivalente a:

var var1 = var2 = var3 = 1;

La diferencia está en el alcance:

function good() { var var1 = 1, var2 = 1, var3 = 1; } function bad() { var var1 = var2 = var3 = 1; } good(); console.log(window.var2); // undefined bad(); console.log(window.var2); // 1. Aggh!

En realidad, esto muestra que la asignación es correcta asociativa. El bad ejemplo es equivalente a:

var var1 = (window.var2 = (window.var3 = 1));


La asignación en JavaScript funciona de derecha a izquierda. var var1 = var2 = var3 = 1; .

Si el valor de cualquiera de estas variables es 1 después de esta declaración, lógicamente debe haber comenzado desde la derecha, de lo contrario el valor o var1 y var2 no estaría definido.

Puedes pensar que es equivalente a var var1 = (var2 = (var3 = 1)); donde el conjunto más interno de paréntesis se evalúa primero.


Prueba esto:

var var1=42; var var2; alert(var2 = var1); //show result of assignment expression is assigned value alert(var2); // show assignment did occur.

Tenga en cuenta el único ''='' en la primera alerta. Esto mostrará que el resultado de una expresión de asignación es el valor asignado, y la segunda alerta le mostrará que la asignación ocurrió.

De ello se deduce lógicamente que la tarea debe estar encadenada de derecha a izquierda. Sin embargo, como todo esto es atómico para el javascript (no hay subprocesos), un motor en particular puede optar por optimizarlo de manera un poco diferente.


coffee-script puede lograr esto con aplomo ..

for x in [ ''a'', ''b'', ''c'' ] then "#{x}" : true

[ { a: true }, { b: true }, { c: true } ]


a = (b = ''string is truthy''); // b gets string; a gets b, which is a primitive (copy) a = (b = { c: ''yes'' }); // they point to the same object; a === b (not a copy)

(a && b) es la abreviatura de (a ? b : a)

(a || b) es la abreviatura de (a ? a : b)

(a = 0, b) es corto para no preocuparse si a es verdad, devuelve implícitamente b

a = (b = 0) && "nope, but a is 0 and b is 0"; // b is falsey + order of operations a = (b = "b is this string") && "a gets this string"; // b is truthy + order of ops

Precedencia del operador de JavaScript (orden de las operaciones)

Tenga en cuenta que el operador de coma es en realidad el operador con menos privilegios, pero los paréntesis son los más privilegiados, y van de la mano al construir expresiones de una línea.

Eventualmente, es posible que necesites ''thunks'' en lugar de valores primitivos codificados, y definitivamente me he tropezado al pasar accidentalmente múltiples params, en lugar de ejecutar dos expresiones.

Para mí, un thunk es tanto la función como el valor resultante (la misma ''cosa'').

const windowInnerHeight = () => 0.8 * window.innerHeight; // a thunk windowInnerHeight(); // a thunk