一尘不染

反引号调用函数

javascript

我不确定如何解释,但是当我跑步时

console.log`1`

在谷歌浏览器中,我得到的输出像

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

反引号为什么要调用log函数,为什么要对它进行索引raw: Array[1]

由Catgocat在JS室提出的问题,但是除了关于模板化字符串的事情之外,没有任何其他答案是合情合理的。


阅读 552

收藏
2020-04-25

共1个答案

一尘不染

在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"

基本上,它只是使用console.log函数标记“ 1”,就像使用其他任何函数一样。标记功能接受已解析的模板字符串值以及分别可在其上执行更多任务的值。

Babel将上述代码转换为

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,该控制台随后将打印阵列。

2020-04-25