在clojurescript中调用自定义javascript函数

在clojurescript中调用自定义javascript函数,javascript,interop,clojurescript,Javascript,Interop,Clojurescript,我的项目.clj如下: (defproject cljsbuild-example-simple "0.3.2" :description "A simple example of how to use lein-cljsbuild" :source-paths ["src-clj"] :dependencies [[org.clojure/clojure "1.5.1"] [compojure "1.0.4"] [

我的项目.clj如下:

(defproject cljsbuild-example-simple "0.3.2"
  :description "A simple example of how to use lein-cljsbuild"
  :source-paths ["src-clj"]
  :dependencies [[org.clojure/clojure "1.5.1"]
                 [compojure "1.0.4"]
                 [hiccup "1.0.0"]]
  :plugins [[lein-cljsbuild "0.3.2"]
            [lein-ring "0.7.0"]]
  :cljsbuild {
    :builds [{:source-paths ["src-cljs"]
              :compiler {:output-to "resources/public/js/main.js"
                         :libs ["src-js/jsfuncs.js"]
                         :optimizations :whitespace
                         :pretty-print true}}]}
  :ring {:handler example.routes/app})
jsfuncs.js包含以下代码:

function calculate(a,b,c) {
    d = (a+b) * c;
    return d;
}
如何从clojurescript文件中调用此js函数?我试图通过以下方式调用此函数:

(js/calculate 4 5 6)

但这并不奏效。谢谢。

主要问题是谷歌闭包编译器需要阅读JavaScript并能够理解它。普通JS代码缺少编译器所需的一些提示(JSDoc标记)和名称空间

JSDoc标记是可选的(它们帮助编译器捕获额外的错误并更好地优化代码),但是需要添加名称空间部分。这就是:

goog.provide('jsfuncs');

/**
 * @param {number} a
 * @param {number} b
 * @param {number} c
 * @return {number}
 */
jsfuncs.calculate = function(a, b, c) {
  d = (a+b) * c;
  return d;
};
另一种方法是为闭包编译器提供一个描述JS代码的外部文件。我不是100%确定如何做到这一点,但有一些。还有一些大型外部文件,包括jQuery、Angular和其他公共库

执行以下方法之一后,可以使用以下方法调用calculate:

(ns some.namespace
   (:require [jsfuncs :as jsf]))

(console/log (jsf/calculate 1 2 3))

主要问题是Google闭包编译器需要读取JavaScript并能够理解它。普通JS代码缺少编译器所需的一些提示(JSDoc标记)和名称空间

JSDoc标记是可选的(它们帮助编译器捕获额外的错误并更好地优化代码),但是需要添加名称空间部分。这就是:

goog.provide('jsfuncs');

/**
 * @param {number} a
 * @param {number} b
 * @param {number} c
 * @return {number}
 */
jsfuncs.calculate = function(a, b, c) {
  d = (a+b) * c;
  return d;
};
另一种方法是为闭包编译器提供一个描述JS代码的外部文件。我不是100%确定如何做到这一点,但有一些。还有一些大型外部文件,包括jQuery、Angular和其他公共库

执行以下方法之一后,可以使用以下方法调用calculate:

(ns some.namespace
   (:require [jsfuncs :as jsf]))

(console/log (jsf/calculate 1 2 3))