反引号调用一个函数

我不知道如何解释这一点,但是当我跑步

console.log`1` 

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

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

为什么是反向调用日志function,为什么它做一个raw: Array[1]的指数raw: Array[1]

由Catgocat在JS房间里提出的问题,但除了模板化string的东西之外,没有任何答案是有意义的,这并不适合为什么会发生这种情况。

它在ES-6中被称为标记模板string更多可以阅读关于他们在这里 , 有趣的是,我发现在聊天的加星标部分的链接。

但是代码的相关部分在下面(基本上可以创build一个filtersorting)。

 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”,就像其他函数一样。 标记函数接受模板string的parsing值和分别进行进一步任务的值。

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,然后打印数组。