【问题标题】:Why does a trailing template literal execute a function? [duplicate]为什么尾随模板文字执行函数? [复制]
【发布时间】:2017-07-29 06:49:08
【问题描述】:
今天在 Twitter 上发现了这个 javascript 谜语:https://twitter.com/bradleymeck/status/890795540123865088
// #js
const a = f => f``;
const b = f => f``;
console.log(a(_ => _) === b(_ => _));
// what do you think this will/may print
乍一看,它实际上似乎有点道理。 a 是一个函数,它接受一些输入 f,然后执行 f``。 f`` 对我来说完全是个谜,所以我把它扔进控制台并收到了这个输入。
(()=>{console.log('hi')})``
嗨
所以看起来尾随模板字面量执行了它前面的函数。我知道模板文字是立即执行的代码,但这种行为对我来说毫无意义。谁能给我解释一下?
【问题讨论】:
标签:
javascript
ecmascript-6
【解决方案1】:
也许这段代码可以帮到你:
var test1 = 2;
var test2 = 3;
function fTest(strings, ...params){
strings.forEach((x) => console.log(`string param: ${x}`));
params.forEach((x, index) => console.log(`param ${index}: ${x}`));
}
const a = (f, param1, param2) => f`tagged ${param1} template ${param2} literals`;
a(fTest, test1, test2);
这个谜团是一个标记的模板文字:
本质上,您将模板文字传递给您的函数,它将占位符解释为参数,以及它们之间的字符串。
您可以阅读here 的文档。
另一件事:如果您想忽略转义序列,您可以使用strings 上的raw 函数(参见示例)。