Подтвердить что ты не робот

Backticks, вызывающие функцию

Я не уверен, как это объяснить, но когда я запустил

console.log`1`

В google chrome я получаю вывод, например

console.log`1`
VM12380:2 ["1", raw: Array[1]]

Почему обратный вызов вызывает функцию журнала и почему он делает индекс raw: Array[1]?

Вопрос, поднятый в JS-комнате Catgocat, но никаких ответов не было смысла, кроме чего-то о шаблонах строк, которые действительно не соответствовали, почему это происходит.

4b9b3361

Ответ 1

Это называется Tagged Template в ES-6, о котором можно прочитать о них. Здесь, смешно, я нашел ссылку в главной части чата.

Но соответствующая часть кода ниже (вы можете в принципе создать отфильтрованную сортировку).

function tag(strings, ...values) {
  assert(strings[0] === 'a');
  assert(strings[1] === 'b');
  assert(values[0] === 42);
  return 'whatever';
}
tag 'a${ 42 }b'  // "whatever"

По сути, это просто пометка "1" с помощью функции console.log, как и для любой другой функции. Функции тегов принимают разобранные значения строк шаблона и значения отдельно, по которым могут выполняться дополнительные задачи.

Бабель переводит вышеуказанный код в

var _taggedTemplateLiteralLoose = function (strings, raw) { strings.raw = raw; return strings; };

console.log(_taggedTemplateLiteralLoose(["1"], ["1"]));

Как вы можете видеть это в приведенном выше примере, после трансляции с помощью babel функции тегирования (console.log) передается возвращаемое значение следующего es6-> 5 переданного кода.

_taggedTemplateLiteralLoose (["1"], ["1"]);

Возвращаемое значение этой функции передается в console.log, который затем распечатает массив.