JS模板中hash函数无括号调用及输出结果的技术问询
JS模板字符串标签函数问题解答
1. 为何hash函数调用时无需使用括号()?
这是JavaScript的**标签模板(Tagged Templates)**语法特性:当一个函数直接紧跟在模板字符串(`...`)前方时,JS会自动把这个函数当作「标签函数」调用,不需要加括号()。这种写法是语法糖,本质是JS引擎会自动拆分模板字符串的内容,再传递给该函数执行。
2. 输出结果foo bar , baz##3是如何产生的?
一步步拆解执行过程:
- 先看标签函数调用
hashbar ${count} baz``:- JS引擎会把模板字符串拆分为两部分:
- 第一个参数:所有非插值的普通字符串组成的数组,即
[' bar ', ' baz'] - 后续参数:每个插值表达式的计算结果,这里
count的值是3,所以第二个参数为3
- 第一个参数:所有非插值的普通字符串组成的数组,即
- 执行
hash函数:- 参数
a接收数组[' bar ', ' baz'],数组与字符串拼接时会自动调用toString()方法,转成bar , baz(数组元素用逗号分隔) - 再拼接
"##"和参数b的值3,得到bar , baz##3
- 参数
- JS引擎会把模板字符串拆分为两部分:
- 最后外层模板字符串
foo ${hash ...}把上述结果拼接进去,就得到最终输出foo bar , baz##3
内容的提问来源于stack exchange,提问作者user5182503
相关产品推荐
相关产品推荐

