今天在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')})``
喜
所以似乎尾随模板文字执行其前面的函数。我理解模板文字是立即执行的代码,但这种行为对我没有意义。有人可以向我解释一下吗?
答案 0 :(得分: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文档。
另一件事:如果你想忽略转义序列,你可以使用raw
上的strings
函数(参见示例)。