资产期间出错:由于Javascript函数默认参数而预编译

时间:2013-08-28 09:47:48

标签: javascript ruby-on-rails rake

我使用Rails 4.0.0,     我做资源:预编译 关于ENV - 生产,并有一些错误信息:

rake aborted!
Unexpected token operator «=», expected punc «,» (line: 15816, col: 39, pos: 465171)
Error
at new JS_Parse_Error (/tmp/execjs20130828-23982-1kgxmyu.js:2357:10736)
at js_error (/tmp/execjs20130828-23982-1kgxmyu.js:2357:10955)
at croak (/tmp/execjs20130828-23982-1kgxmyu.js:2357:18665)
at token_error (/tmp/execjs20130828-23982-1kgxmyu.js:2357:18802)
at expect_token (/tmp/execjs20130828-23982-1kgxmyu.js:2357:19025)
at expect (/tmp/execjs20130828-23982-1kgxmyu.js:2357:19163)
at /tmp/execjs20130828-23982-1kgxmyu.js:2357:23402
at /tmp/execjs20130828-23982-1kgxmyu.js:2357:23466
at /tmp/execjs20130828-23982-1kgxmyu.js:2357:20786
at /tmp/execjs20130828-23982-1kgxmyu.js:2357:19536
(in ~/RubymineProjects/Hermes/app/assets/javascripts/application.js.erb)        ~/.rvm/gems/ruby-1.9.3-p448/gems/execjs-1.4.0/lib    /execjs/external_runtime.rb:68:in `extract_result'

这种结构引发错误:函数searchHelper(myMap,coords, cond = false ) 但没有默认参数命令完成没有退出代码:function searchHelper(myMap,coords, cond

它是什么?我在哪里可以阅读它?

2 个答案:

答案 0 :(得分:5)

如果其他人遇到此问题,您可能已为函数参数设置了默认值,这在javascript代码中是不可能的。

<强> INVALID

function hello(param = true){
  ...
}

<强> VALID

function hello(param) {
  if (typeof param == 'undefined')
    param = true;

  ...
}

答案 1 :(得分:1)

我知道几年前已经回答了这个问题,但是我一直在使用3.2版的Rails应用程序,最近遇到了这个问题。我想添加到Tomáš Dundáček's Answer。事实证明,Javascript中的默认参数具有以下格式:

class AppDefinition:

    def __init__(self):
        self.App = Flask(__name__, instance_relative_config = True)
        self.PlacesProvider = GooglePlacesSearchProvider(
            'https://maps.googleapis.com/maps/api/place/findplacefromtext/json',
            'my_api_key')

app = AppDefinition()

@app.App.route('/search/phone/<phone>/<language>')
def search_with_phone_number(phone: str, language: str):
    resp = app.PlacesProvider.get_by_phone_number(phone, language)
    return from_response(resp)

@app.App.route('/search/address/<address>/<language>')
def search_with_address(address: str, language: str):
    resp = app.PlacesProvider.get_by_address(address, language)
    return from_response(resp)

def from_response(resp: Response):
    return json.dumps(resp.json(), ensure_ascii = False)

if __name__ == '__main__':
    HOST = 'localhost'
    PORT = 5000
    app.App.run(HOST, PORT)

是ES6语法功能,在ES5中不可用。就像上面提到的一样,

function hello(param = true) {
    ...
}

在ES5中有效。根据您在预编译期间使用哪些JavaScript库(例如uglify-js),您的JavaScript文件可能无法正确编译。如果库仅了解ES5,则在预编译期间包括ES6的任何功能都将导致此错误和类似错误。这个问题在this thread on Github中有更多讨论。