2012-08-16 60 views
2

我试图编译很简单的咖啡脚本:为什么多次运行CoffeeScript编译器会产生不同的输出?

n = 4; 

使用代码

require('coffee-script').compile(str); 

我在我的解决了这个多次做,没有缓存的结果。我第一次这样做,我得到:

(function() { 
    var n; 
    n = 4; 
}).call(this); 

但如果我再次调用它,我得到:

n = 4; 

为什么我没有拿到包装函数的第二次圆的,我怎样才能让它每次都有相同的结果。

+1

无法重现,我每次都得到相同的(包装)代码。你尝试过'coffee.compile(str,{bare:false})'吗?发布您的代码。 – 2012-08-16 20:49:48

+0

@Ricardo修复它,令人惊讶的行为,因为之前我没有选择options.bare。不过,很高兴它被分类。如果你想发布它作为答案,我会接受它。 – ForbesLindesay 2012-08-17 08:28:17

回答

1

无法重现,我每次都得到相同的(包装)代码。使用coffee.compile(str, { bare: false })来执行封闭包装。

0

由于范围问题,我认为可能会发生(即不同的产出)。

正常情况下,您只需要一个var变量语句。而且似乎是在第一次调用期间所有需要的声明都已创建,而第二次调用只是重用了它们。

我相信这可能是由于使用相同的require('coffee-script')实例。

+0

好的,有没有办法禁用'coffee-script'的缓存,所以我每次都需要新鲜的? 另外,'var'语句仍然是需要的,因为第一位get的代码被封装在一个自调用函数中,所以第二次调用'n'将把它赋给'global'对象。 – ForbesLindesay 2012-08-16 12:04:07

0

编译只是第二次出于某种原因没有工作。 CoffeeScript代码总是包装在一个函数中。

+0

那么我建议开启第二个过程?或者有另一种方法来访问API? – ForbesLindesay 2012-08-16 14:11:04

相关问题