Первый пример (log`foo`
) позволяет спецификации языка определять значения, передаваемые в функцию журнала (см. 12.3.7). Во втором примере (log(`foo`)
) явно передается единственный аргумент.
Литералы шаблона могут содержать строки, а также выражения. Иногда вам может потребоваться больший контроль над компиляцией строки из ее частей строки и частей выражения. В этом случае вы можете искать шаблоны с тегами.
var name = "Jonathan";
var mssg = foo `Hello, ${name}. Nice name, ${name}.`;
function foo ( strings, ...values ) {
console.log( strings ); //["Hello, ", ". Nice name, ", ".", raw: Array[3]]
console.log( values ); //["Jonathan", "Jonathan"]
}
Обратите внимание, как все строки передаются через первый аргумент. Кроме того, все выражения интерполированного значения передаются через остальные параметры (здесь собраны вместе в массив).
С помощью этого дополнительного элемента управления мы могли делать все, что угодно, например, локализовать. В этом примере спецификация языка определяет соответствующие значения для передачи функции, которую разработчик не определяет.
Напротив, когда вы вызываете log(foo
)
, вы получаете только результирующую строку. Ни объектов, ни частей, ни сырых значений.
person
Sampson
schedule
11.11.2015