【问题标题】:Getting "reserved word 'function’" when trying to define coffee script function尝试定义咖啡脚本功能时获取“保留字'功能'”
【发布时间】:2016-09-07 20:58:30
【问题描述】:

我有这个咖啡脚本

@open_login_dialog = () ->
  opt = {
    autoOpen: false,
    modal: true,
    width: 'auto',
    focus: function(e) ->
      $(this).dialog('option', 'width', $("#loginBox").width())
  }

Rails 报告神秘错误“SyntaxError: [stdin]:184:12: reserved word 'function'”。它没有告诉我一条线,但是当我注释掉“focus:function”部分时,一切正常,这让我相信这是罪魁祸首。我如何编写以上内容,以便它与咖啡脚本很好地配合?

【问题讨论】:

  • 你在上面定义@open_login_dialog的地方有正确的语法。
  • 还是不行。我将以“focus:”开头的行更改为“focus = (e) ->”并收到错误“SyntaxError: [stdin]:184:11: unexpected =".
  • 好吧,错误说明了一切。您需要使用: 在对象内部进行赋值,而= 是对变量的赋值。 @muistooshort 的意思是你应该使用() -> 而不是function。所以该行应该是focus: (e) ->

标签: function coffeescript focus


【解决方案1】:

根据@muistooshort 的评论,您需要使用coffeescript 函数语法,将function(a,b,c) 替换为(a,b,c) ->

其次,您需要继续使用: 在对象内部进行赋值。

我还建议复习一下coffeescript。这是我在语言上的favourite resource。 linter 也有助于捕捉这些基本的语法错误。

您的代码可以进一步清理:

@open_login_dialog = ->
  opt = 
    autoOpen: false
    modal: true
    width: 'auto'
    focus: -> 
      $(this).dialog 'option', 'width', $('#loginBox').width()

说明

  1. 如果您不希望有任何参数,您可以在函数定义中省略(),直接使用箭头->

  2. 你不需要{}括号来定义一个对象

  3. 在多行定义对象时,不需要尾随逗号

  4. 您没有在焦点侦听器中使用eventObject e,因此也可以省略。

  5. 在调用函数并传递参数时,括号是可选的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-06
    • 2012-10-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    相关资源
    最近更新 更多