首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么在使用模板字符串时可以调用不带括号的函数?

为什么在使用模板字符串时可以调用不带括号的函数?
EN

Stack Overflow用户
提问于 2015-11-12 05:52:15
回答 1查看 3.3K关注 0票数 23

我有一个简单的日志函数:

function log(str) {
  console.log('logged: ', str);
}

如果我调用它时不带括号(目前使用的是Chrome的开发工具),并传入一个模板字符串,如下所示:

log`foo`

输出为:logged: ["foo", raw: Array[1]]

如果我用括号来调用它,

log(`foo`)

输出为:logged: foo

为什么在Javascript中使用模板字符串而不使用括号来调用函数是可行的?是什么原因导致结果与使用括号调用结果不同?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-12 05:58:25

第一个示例(log`foo`)允许语言规范确定传递给log函数的值(请参阅12.3.7)。第二个示例(log(`foo`))显式传递单个参数。

模板文字可以包含字符串,也可以包含表达式。有时,您可能希望通过字符串部分和表达式部分对字符串的编译有更多的控制。在这种情况下,您可能正在寻找标记的模板。

var name = "Jonathan";
var mssg = foo `Hello, ${name}. Nice name, ${name}.`;

function foo ( strings, ...values ) {
    console.log( strings ); //["Hello, ", ". Nice name, ", ".", raw: Array[3]]
    console.log( values  ); //["Jonathan", "Jonathan"]
}

注意这里所有的字符串是如何通过第一个参数传入的。同样,所有插值的值表达式都通过其余的参数传递(在这里将它们放在一个数组中)。

有了这个额外的控制,我们可以做各种各样的事情,比如本地化。在本例中,语言规范决定了要传递给函数的适当的值--开发人员并不确定这一点。

相反,当您调用log(foo)时,最终只能得到结果字符串。没有对象,没有部件,没有原始值。

票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33660518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档