Javascript 为什么尾部模板文本执行函数?
今天在Twitter上遇到了一个javascript之谜:Javascript 为什么尾部模板文本执行函数?,javascript,ecmascript-6,Javascript,Ecmascript 6,今天在Twitter上遇到了一个javascript之谜: //#js 常数a=f=>f``; 常数b=f=>f``; console.log(a(=>===b(=>)); //你认为这会/可能会印什么 乍一看,这似乎有点道理a是一个函数,它接受一些输入f,然后执行f`。什么f`对我来说完全是个谜,所以我把它扔进了控制台,收到了这个输入 (()=>{console.log('hi')})` 嗨 因此,后面的模板文本似乎执行其前面的函数。我知道模板文字是立即执行的代码,但这种行为对我来说毫无意
//#js
常数a=f=>f``;
常数b=f=>f``;
console.log(a(=>===b(=>));
//你认为这会/可能会印什么
乍一看,这似乎有点道理a
是一个函数,它接受一些输入f
,然后执行f`
。什么f`
对我来说完全是个谜,所以我把它扔进了控制台,收到了这个输入
(()=>{console.log('hi')})`
嗨
因此,后面的模板文本似乎执行其前面的函数。我知道模板文字是立即执行的代码,但这种行为对我来说毫无意义。有人能给我解释一下吗?也许这段代码可以帮助您:
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);
该mistery是标记的模板文本:
本质上,您将向函数传递一个模板文本,该函数将把占位符以及它们之间的字符串解释为参数
您可以阅读文档
另一件事:如果要忽略转义序列,可以使用
字符串
上的raw
函数(参见示例)。这是一个标记的模板文本: