Javascript 模板文字奇怪的行为

Javascript template literal strange behaviour

为什么下面的代码在语法上是正确的?

let v = ``(oldVal-newVal) / 1000;

它给出了以下运行时错误:

Uncaught TypeError: "" is not a function

我的猜测是 `` 变成了标记模板,而 "" 将是标记名称,但不确定。 (我不小心在 VSCode 中输入了它而不是 Ctrl+` 快捷键。花了一天时间才找到它。;)

标记的模板采用以下形式:

function myTaggedTemplate(...) { }

并被调用:

myTaggedTemplate`...`

您在左侧有一个引用函数的变量名,在右侧有一个模板字符串。


你拥有的相当于:

const left = ``;
left(oldVal-newVal);

错误提示“不是函数”,因为它是字符串,不是函数。

它在语法上是有效的,因为您可以尝试将任何表达式的结果视为一个函数。确定它是否是函数发生在 run-time.