为什么尾部模板文字执行函数?

时间:2017-07-28 22:07:55

标签: javascript ecmascript-6

今天在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')})``

  

所以似乎尾随模板文字执行其前面的函数。我理解模板文字是立即执行的代码,但这种行为对我没有意义。有人可以向我解释一下吗?

1 个答案:

答案 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函数(参见示例)。