【问题标题】:SyntaxError: missing ( before formal parametersSyntaxError:缺少(在形式参数之前
【发布时间】:2017-01-07 13:47:23
【问题描述】:

我试图在我的网站上实现 recaptcha,所以我使用 javascript 创建了一个回调函数,该函数应在用户提交成功的验证码响应时执行:

<script>
   function onSubmit = function(token) {
      document.getElementById("form-signin").submit();
   }
</script>

但在使用 Firefox 时总是出现此错误SyntaxError: missing ( before formal parameters

当使用谷歌浏览器时,我得到了这个错误:Uncaught SyntaxError: Unexpected token =

两个浏览器都显示错误位于function onSubmit = function(token) {,但不知道为什么会这样。

谁能告诉我哪里出了问题?

【问题讨论】:

  • 你应该试试 var onSubmit =
  • 我是如何得到这个错误的:我没有得到足够的睡眠,出于某种原因,我可以在函数名称中使用破折号(用于减法的数学运算符)。对于任何想知道并偶然发现相同错误的人,您不能(显然;这是减法)。

标签: javascript function


【解决方案1】:

声明命名函数有两种基本方法:

function onSubmit(token){
    document.getElementById("form-signin").submit();
}

或者:

var onSubmit = function(token){
    document.getElementById("form-signin").submit();
};

在你的情况下,就选择第一个。

【讨论】:

  • @DavidThomas 我知道。关键是第二种方式可能会让初学者感到困惑,因为它模糊了函数和变量之间的界限。它们可以被同等对待,这对于 HOF、闭包等很有用。但是当你开始 javascript 时,第一个更容易理解,恕我直言。
  • 在我的情况下,jQuery.my_function = function(){ ... }; 是唯一可能的,; 丢失了。 function jQuery.my_function(){ ... } 肯定不行。
  • @Meloman 是的,这是一个很好的观点。当您有一个现有对象(例如 jQuery 在您的情况下)时,您不能使用第一种语法在其上声明一个新函数。 first version 只接受 Javascript identifier,而不是完整的对象路径。
【解决方案2】:

function some_identifier 可以启动函数声明或函数表达式。无论哪种方式,下一个字符必须是 (,然后是任何参数定义,然后是 )

如果您想将计算函数表达式的结果分配给变量,就像您在这里尝试做的那样,那么您必须以正常方式声明变量(即使用@987654324 @ 关键字,除非你已经声明了它,或者没有使用严格模式并且想要创建一个全局)。

所以要么:

function onSubmit(token) {
  document.getElementById("form-signin").submit();
}

var onSubmit = function(token) {
  document.getElementById("form-signin").submit();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    相关资源
    最近更新 更多