tag img bootstrap attribute javascript scope

javascript - img - title html attribute



¿Hay una manera de hacer la asignación múltiple y la inicialización con el alcance del bloque? (4)

La asignación pasa de derecha a izquierda. Por lo tanto, dejar que la declaración solo sea aplicable a a y no a b
Todas las demás variables se consideran globales sin la declaración var / let, por lo que b será la global

Me gustaría declarar dos variables con alcance de bloque e inicializarlas al mismo valor. Sería bueno si lo siguiente funcionara de esa manera pero no ...

{ let a = b = "wang"; } console.log("b:", b);

La variable ''a'' tiene un alcance de bloque, pero la variable ''b'' no, tiene un alcance de función como si estuviera declarada con una var.

¿Hay una sola línea * forma de lograr esto o tengo que hacer ...

let a, b; a = b = "wang";

* no es que arrojara legibilidad debajo de un bus para salvar un par de caracteres que entiendes, solo tengo curiosidad!


Puede utilizar la destructuring matrices con fill para evitar repetir el valor:

{ let [a, b, c, d] = Array(4).fill("wang"); console.log(a, b, c, d); // "wang", "wang", "wang", "wang" } a; // ReferenceError

Si no quiere preocuparse por el número de variables y no desea asignar grandes matrices, también puede usar una expresión de función de generador invocada de inmediato. Para simplificar, puede ser una buena idea implementar esto como una función auxiliar.

const repeat = function*(value){while(true) yield value}; { let [a, b, c, d] = repeat("wang"); console.log(a, b, c, d); // "wang", "wang", "wang", "wang" } a; // ReferenceError


Puedes hacerlo en una única declaración de let siguiente manera:

{ let a = "wang", b = a; } console.log("b:", b); //undefined or ReferenceError

Debido a que tanto a como b se declaran y se let dentro de las llaves, ambos obtienen el alcance del bloque. Debe asignar a primero para que se asigne antes de asignarlo a b también.


Puedes intentar con

{ let [a, b] = [3, 3]; console.log(a); console.log(b)}