为了代码重用的目的,我想在一个函数中捕获一些逻辑,并在其他模块中调用它
这是功能定义
// Module A
define (require) ->
doSomething(a, b, c) ->
"#{a}?#{b}&#{c}"
以下是如何使用功能doSomething
// Module B
define(require) ->
a = require 'A'
...
class Bee
constructor: ->
@val = a.doSomething(1, 2, 3)
但是在浏览器中,我收到了此错误消息
Uncaught ReferenceError: doSomething is not defined
在coffeescript中导出/导入自由函数的正确方法是什么?
答案 0 :(得分:0)
此:
define (require) ->
doSomething(a, b, c) ->
"#{a}?#{b}&#{c}"
不是函数定义。这就是伪装:
define (require) ->
return doSomething(a, b, c)( -> "#{a}?#{b}&#{c}")
所以你的模块试图调用doSomething
函数,然后调用它返回的内容作为另一个函数,它将第三个函数作为参数。然后,从模块发回任何doSomething(...)(...)
返回。
所以当你这样说时:
a = require 'A'
你在a
中得到“谁知道什么”而且该内容没有doSomething
属性,因此a.doSomething(1,2,3)
会为你提供ReferenceError
。
我想你想把你的函数包装在模块中的一个对象中:
define (require) ->
doSomething: (a, b, c) ->
"#{a}?#{b}&#{c}"
或者,您可以返回功能:
define (require) ->
(a, b, c) ->
"#{a}?#{b}&#{c}"
然后像这样使用它:
doSomething = require 'A'
doSomething(1, 2, 3)