Sumergir un dedo del pie en JavaScript. Después de C, C++ y Python, JavaScript es como el salvaje oeste. ¿Alguien puede explicar por qué obtengo el resultado que no tiene ningún sentido?
var a = 5; var b = 10; function foo(strings, ...values) { let a = values[0]; let b = values[1]; return `Sum ${a + b} Product ${a * b} Division ${b / a}`; } console.log(foo`Num1 ${a + 10} Num2 ${b * 2} Num3 ${b / a}`);La salida: Suma 35 Producto 300 División 1.3333333333333333
Los valores que se le presentan en la función son los siguientes:
let strings = ['Num1 ', ' Num2 ', ' Num3 ', '']; let values = [15, 20, 2]; // a+10, b*2, b/aEstás regresando:
`Sum ${15 + 20} Product ${15 * 20} Division ${15 / 20}`Esto era de esperar, ya que evaluó las plantillas y luego las ejecutó dentro de la etiqueta también.
De las plantillas etiquetadas de MDN :
Las etiquetas le permiten analizar literales de plantilla con una función. El primer argumento de una función de etiqueta contiene una matriz de valores de cadena. Los argumentos restantes están relacionados con las expresiones.
La función de etiqueta puede realizar cualquier operación en estos argumentos que desee y devolver la cadena manipulada.
Puede parecer una construcción inusual, pero su código demuestra cómo funciona. El argumento de strings es una matriz ['Num1 ', 'Num2 ', 'Num3 ', ''] , que son los literales antes, entre y después de las expresiones, y los values son las expresiones evaluadas [15, 20, 2] .