Следующий фрагмент кода используется в Mozilla (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals), чтобы объяснить Tagged Template literal
, помогите мне понять, что делает следующая функция, я не могу получить фактический поток функции, поскольку они использовали keys.foreach
, и когда я проверял в Chrome, клавиши были функцией, поэтому я не мог понять
function template(strings, ...keys) {
return (function(...values) {
var dict = values[values.length - 1] || {};
var result = [strings[0]];
keys.forEach(function(key, i) {
var value = Number.isInteger(key) ? values[key] : dict[key];
result.push(value, strings[i + 1]);
});
return result.join('');
});
}
var t1Closure = template`${0}${1}${0}!`;
t1Closure('Y', 'A'); // "YAY!"
var t2Closure = template`${0} ${'foo'}!`;
t2Closure('Hello', {foo: 'World'}); // "Hello World!"
keys
- это массив. - person Bergi   schedule 14.09.2017for (let i=0; i<keys.length; i++) { const key = keys[i]; …
вместо вызоваforEach
. Это не имеет значения для понимания шаблонных литералов. - person Bergi   schedule 14.09.2017