当前位置: 首页 > 知识库问答 >
问题:

ES6调用带有模板文字但没有括号的函数[重复]

郭永怡
2023-03-14

根据MDN,标记的模板文本可以按如下方式使用:

var a = 5;
var b = 10;
function tag(strings, ...values) {
  alert(strings[0]); // "Hello "
  alert(strings[1]); // " world "
  alert(values[0]); // 15
  alert(values[1]); // 50
  return "Bazinga!";
}
tag `Hello ${ a + b } world ${ a * b }`; // "Bazinga!"

在上面的示例中,调用函数tag,而不使用括号。

我希望它应该像tag(`Hello`)那样调用,但它会将模板文本产生的字符串作为函数的strings参数传递。

调用不带括号但带参数的函数有什么特点?

共有1个答案

申屠黎昕
2023-03-14

调用没有括号的函数有什么特点?

语法仅允许标记模板的这种语法:

MemberExpression : MemberExpression TemplateLiteral
CallExpression : CallExpression TemplateLiteral

这些规则意味着MemberExpressionCallExpression后跟TemplateLiteral被视为函数调用。规范中的附加说明:

带标记的模板是一个函数调用,其中调用的参数派生自TemplateLiteral(12.2.9)。实际参数包括一个模板对象(12.2.9.3)和通过计算嵌入在TemplateLiteral中的表达式而产生的值。

如果你问为什么这样做,我不能给你一个答案。

但是,如果您仔细想想,就不可能只使用“普通”函数调用语法tag(`…`)意味着tag传递一个参数,即计算模板文本的结果。但正如您在MDN示例中看到的,标记的模板函数实际上传递了多个参数。如果函数以不同的方式(内部)调用(如果传递给它们一个模板文本)而不是使用不同的值调用它们,那么肯定会更令人惊讶。然后,如果你真的想传递一个模板文本给一个函数,你会怎么调用它呢?

因此,引入新语法似乎是有意义的。

FWIW,这是“普通”函数调用的语法:

CallExpression : MemberExpression Arguments
CallExpression : CallExpression Arguments
 类似资料:
  • 对于在C 11中调用模板函数需要什么,我有点困惑,在C 11中为模板参数提供默认值。 例如,假设我有以下模板化函数 我想在代码中的某个地方调用它。所有这些电话都有效吗? 它可以很好地编译GCC 4.7.2,但我不确定它是否完全正确。我猜我的不确定性可能来自要求使用空尖括号

  • 问题内容: 今天有人告诉我,可以不带括号地调用一个函数。我能想到的唯一方法是使用类似或的函数。 但是,这些都需要加上括号,然后放在第一个平方上。我还考虑了将函数传递给某种事件处理程序的想法,例如: 但是,问题就变成了“如何在没有括号的情况下调用?” 那么这个谜题的解决方案是什么?如何在不使用括号的情况下调用Javascript函数? 问题答案: 有多种不带括号的函数调用方法。 假设您已定义此函数:

  • 今天有人告诉我,可以调用没有括号的函数。我能想到的唯一方法是使用像或这样的函数。 但这些要求在和上加上括号,让我们处于第一步。我还考虑了将函数传递给某种事件处理程序的想法,例如: 但是问题变成了“如何在没有括号的情况下调用?” 那么这个谜的答案是什么呢?如何在Javascript中调用函数而不使用括号?

  • 问题内容: 我注意到,如果使用许多不带括号的DataFrame函数,其行为似乎类似于“属性”,例如 这是如何完成的,是一种好的做法?这是Linux上的熊猫0.15.1 问题答案: 它们是不同的,因此不建议使用,它们清楚地表明这是一种方法并且恰好输出结果,而另一种则表明了预期的输出。 这就是为什么您不应该这样做的原因: 所以好吧,您没有使用括号正确地调用该方法并看到显示为有效的输出,但是如果您引用了

  • 问题内容: 我正在向Django的模板传递一个函数,该函数返回一些记录。我想调用此函数并遍历其结果。 那不行 我试图将函数的返回值设置为变量并遍历该变量,但是似乎没有办法在Django模板中设置变量。 有什么正常的方法吗? 问题答案: 你不能调用在模板中需要参数的函数。写一个模板标签或过滤器。

  • 本文向大家介绍基于js里调用函数时,函数名带括号和不带括号的区别,包括了基于js里调用函数时,函数名带括号和不带括号的区别的使用技巧和注意事项,需要的朋友参考一下 示例代码: 如以上代码: aaa 是将 hi() 的运行结果赋值给它,即 return 返回的匿名函数,此时有一个闭包,则每次调用 aaa 时都访问的同一个 a,aaa() 第一次运行结果为 1,第二次为2 而 bbb 将是将 hi 这