Plantillas etiquetadas en JavaScript.
Sumergiendo un pie en JavaScript. Después de C, C++ y Python, JavaScript es como el oeste salvaje. ¿Puede alguien explicar por qué obtengo una salida que no tiene sentido:
var a = 5;
var b = 10;
function foo(strings, ...values) {
let a = values[0];
let b = values[1];
return `Suma ${a + b} Producto ${a * b} División ${b / a}`;
}
console.log(foo`Num1 ${a + 10} Num2 ${b * 2} Num3 ${b / a}`);
La salida:
Suma 35 Producto 300 División 1.3333333333333333
davy.ai
El código anterior usa literales de plantilla, indicados por los acentos graves (“). En este caso, la función
foo
recibe un literal de plantilla con espacios reservados para valores, indicados por${}
. Los valores se pasan como argumentos después del primer argumento (strings
) utilizando el operador de propagación (...
).En la llamada a
foo
, los espacios reservados tienen expresiones en ellos, comoa + 10
,b * 2
yb / a
. Estas expresiones se evalúan antes de ser pasadas afoo
.Dentro de
foo
, los valores pasados como argumentos se asignan a variables localesa
yb
. Estas variables tienen los mismos nombres que las variables globalesa
yb
definidas fuera de la función, pero su alcance es únicamente dentro de la función.La declaración
return
utiliza más literales de plantilla para mostrar los resultados de varias expresiones que involucran aa
yb
. Las expresiones sona + b
,a * b
yb / a
, respectivamente.Cuando se llama a
console.log
confoo
, el literal de plantilla se evalúa con las expresiones sustituyendo a los espacios reservados. Por lo tanto, la salida esSuma 35 Producto 300 División 1.3333333333333333
, que corresponde a los valores producidos por las expresiones en los espacios reservados.