根据ES6规范,语法
foo`Hello!`
的行为应该与
完全相同foo('Hello!')
在表达式之后放置模板文字会触发函数 调用,类似于参数列表(以逗号分隔的值) 括号)触发函数调用。以前的代码是等效的 到以下函数调用(实际上,函数获得更多 信息,但稍后会解释。)
但是,在以下代码段中,将值绑定到函数会导致2个语法的行为不同:
function alertParans() { alert(this) }
function alertNoParans() { alert `${this}` }
var executeParans = alertParans.bind('roman empire');
var executeNoParans = alertNoParans.bind('greek empire');
executeParans();
executeNoParans();
第一个电话会打印'罗马帝国',而第二个电话会打印一个逗号。为什么呢?
答案 0 :(得分:7)
您应该阅读您链接的示例,因为它说的内容与您声称的不同。
In the section it is stated that the following examples are equivalent:
tagFunction`Hello ${firstName} ${lastName}!`
tagFunction(['Hello ', ' ', '!'], firstName, lastName)
现在,如果你要将此应用于警报,它将如下所示:
function alertParans() { alert(['', ''], this); }
function alertNoParans() { alert`${this}`; }
var executeParans = alertParans.bind('roman empire');
var executeNoParans = alertNoParans.bind('greek empire');
executeParans();
executeNoParans();
现在你在两种情况下都得到了逗号,因为alert
的第一个参数现在总是一个包含两个空字符串的数组。为什么呢?
因为模板文字在(''
)之前,(this
)之间和之后(''
)插入时被分割为内容。