与字符串一起使用的模板语法不是函数错误

时间:2019-07-15 09:09:21

标签: javascript templates ecmascript-6 syntax syntax-error

我已经注意到有关js es6模板语法的错误

当您键入字符串并在其后键入模板语法后,javascript会自动将第一个字符串转换为方法

这里您有一个stackblitz链接来试用 https://stackblitz.com/edit/js-ty94oe

const testTemplateSyntax = 'test' `hello`;

可能是我期望的Uncaught SyntaxError:意外的字符串

但是我要测试的不是函数

编辑

引起错误是因为在tepmlate Tagged templates

但是在任何上下文中都未定义测试,因此无法找到此方法。

2 个答案:

答案 0 :(得分:1)

它称为Tagged templates,它允许使用函数解析模板文字

答案 1 :(得分:0)

当您在反引号之前紧接有一个表达式时,解释器解析它的唯一方法是,如果您使用的是标记模板文字,并且该表达式是一个函数。例如:

const testTemplateSyntax = (() => '')`hello`;
console.log(testTemplateSyntax, typeof testTemplateSyntax);

const testTemplateSyntax2 = function(){ return '' }`hello`;
console.log(testTemplateSyntax2, typeof testTemplateSyntax2);

有点像用于标记模板的IIFE。如果左侧的表达式不能作为函数求值,则会抛出您看到的错误。

左侧的任何其他非函数表达式都将导致相同的运行时错误:

5 `foo`

null `foo`

undefined `foo`

({}) `foo`