第一个示例 ( 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
)