我今天遇到了一个错误——TypeError: "fa" is not a function
经过短暂的调查,我找到了原因。我忘记了对象文字中的逗号,这给我留下了相当于一个字符串,后跟一个模板字符串,本质上是:"fa"``
. 看到not a function
我希望找到一些冒犯性的括号并觉得这很好奇,所以我在 Node REPL 中加深了我的调查。
''`` // TypeError: '' is not a function
'foo'`` // TypeError: 'foo' is not a function
1`` // TypeError: 1 is not a function
(() => 'foobar')`` //'foobar'
好的,所以我发现模板字符串的工作方式类似于在标记后放置括号。越来越好奇。
我想知道它是否传递了任何论点,所以我写了这个:
function showArgs () {
return arguments
}
showArgs() // {}
showArgs`` // { '0': [ '' ] }
showArgs`foo` // { '0': [ 'foo' ] }
showArgs`foo${'bar'}` // { '0': [ 'foo', '' ], '1': 'bar' }
showArgs`foo${'bar'}${1}` // { '0': [ 'foo', '', '' ], '1': 'bar', '2': 1 }
showArgs(`foo${'bar'}${1}`) // { '0': 'foobar1`' }
这里发生了什么?
参数显然与模板字符串有关,因为它们可以用于通过将第n个数组项与第n + 1个参数连接并将它们全部连接起来来构造它,但是为什么模板字符串执行前面的标记那些论点?