【问题标题】: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 函数(参见示例)。

【讨论】:

    猜你喜欢
    • 2017-04-23
    • 2020-03-30
    • 2022-01-27
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    相关资源
    最近更新 更多